My requirement is simple, i have a JSON file in webserver and i have to parse it in android and i know the parsing method, but i have to display the output by different way in the following JSON file,
{
"Productcategory": [
{
"shop_cat_id": "1",
"shop_cat_name": "kurtis",
"shop_scat_id1": "1",
"shop_scat_id1name": "cotton kurtis",
"shop_scat_id2": "2",
"shop_scat_id2name": "Cotton Designer Kurtis",
"shop_scat_id3": "3",
"shop_scat_id3name": "soft Designer kurtis"
},
{
"shop_cat_id": "2",
"shop_cat_name": "Sarees",
"shop_scat_id1": "1",
"shop_scat_id1name": "Saree 1",
"shop_scat_id2": "2",
"shop_scat_id2name": "Saree 2",
"shop_scat_id3": "3",
"shop_scat_id3name": "Saree 3",
"shop_scat_id4": "4",
"shop_scat_id3name": "Saree 4"
},
{
"shop_cat_id": "3",
"shop_cat_name": "Anarkkali suits",
"shop_scat_id1": "1",
"shop_scat_id1name": "Readymade",
"shop_scat_id2": "2",
"shop_scat_id2name": "Stitched",
"shop_scat_id3": "3",
"shop_scat_id3name": "Unstitched"
},
{
"shop_cat_id": "4",
"shop_cat_name": "CottonLeggins",
"shop_scat_id1": "1",
"shop_scat_id1name": "LSize",
"shop_scat_id2": "2",
"shop_scat_id2name": "XLsize",
"shop_scat_id3": "3",
"shop_scat_id3name": "3XLsize",
"shop_scat_id4": "4"
},
{
"shop_cat_id": "5",
"shop_cat_name": "PattialaPantsset",
"shop_scat_id1": "1",
"shop_scat_id1name": "LSize",
"shop_scat_id2": "2",
"shop_scat_id2name": "XLsize",
"shop_scat_id3": "3",
"shop_scat_id3name": "3XLsize",
"shop_scat_id4": "4"
},
{
"shop_cat_id": "6",
"shop_cat_name": "Kids'AnarkkaliSuits",
"shop_scat_id1": "1",
"shop_scat_id1name": "LSize",
"shop_scat_id2": "2",
"shop_scat_id2name": "XLsize",
"shop_scat_id3": "3",
"shop_scat_id3name": "3XLsize",
"shop_scat_id4": "4"
}
]
}
I fetched the "shop_cat_name" field in a separate ListView and it looks like below,
I need to display the subcategory in separate ListView for each Category Clicked.
But when i parse the "shop_scat_id1name" field, the data fetching in all the array fields with different category name like below image,
My required output should be like below when i click the first category and similarly for other category based on their subcategory..
Category name i click
Kurtis
Subcategory should be
Cotton kurtis
Cotton Designer Kurtis
Soft Designer Kurtis
By what way i have to modify the JSON structure or anything i need to do in coding part?
Help Needed..
I guess you get the vaule from JSON like this : String name=JSON.getString("shop_scat_id1name");
It's wrong.
Wait a minute,I'll give you some examples.
My English is very poor.Very sorry.
First
you should create a entity like this that will stored value.
public class Productcategory implements Serializable{
/**
*
*/
private static final long serialVersionUID = 7249744975503046565L;
private String shop_cat_id;
private String shop_cat_name;
private String shop_scat_id1;
private String shop_scat_id1name;
private String shop_scat_id2;
private String shop_scat_id2name;
private String shop_scat_id3;
private String shop_scat_id3name;
...Ignore get and set method
}
Second
you can use gson or use a lot of json.getString....
// this is your json,I replace it with ""
String jsondata="";
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray Jarray = parser.parse(jsondata).getAsJsonArray();
ArrayList<Productcategory> pc_list= new ArrayList<Productcategory>();
for (JsonElement obj : Jarray) {
Productcategory pc = gson.fromJson(obj, Productcategory.class);
pc_list.add(pc);
}
Third
Now,you get a list,you can use it for your ListView and if you want to click the item,
you should use pc_list.get(position) to get a Productcategory,so you can fill detail page.
I tried to let you know what I'm saying.But my English sucks.
You can use expandablelistview where your group will be the main category and onclick subcategory will be displayed.
To do this you need to do is create a object of product which contains shop_cat_id,shop_cat_name,... etc and then create a list of this.
Then pass this list to the BaseExpandableListAdapter, since the variable in the object maintain its position in getGroupView set the shop_cat_name to groupview and other three subcategory to getChildView.
you need change your json with following, as you mention in your comment that your sub Category is not fix then you must send one jsonArray as inner of all category. i write one for you:
"Productcategory": [
{
"shop_cat_id": "1",
"shop_cat_name": "kurtis",
"shop_scat_id1": "1",
"SubCategory": [
"cotton kurtis",
"Cotton Designer Kurtis",
"soft Designer kurtis"
]
},
........
// other jsonObject is same
you need handle id number in your code, because you have simple id number that start from 2. if have a problem with that say to me.
Edit
for catching value on SubCategory you must use following code:
JSONObject json = jsonarray.getJSONObject(i);
JSONArray SubCategoryArray = json.getJSONArray("SubCategory");
for (int i = 0 ; i < SubCategoryArray.length() ; i++)
{
map.put( i+1 , SubCategoryArray.getString(i));
// with this code you have title and id of your subCategory in map
// id start from 1 ( i + 1).
}
Related
How to print php response json response in android?
I am android developer but I don't have any idea about json parsing.
{
"details": [
{
"p_id": "19",
"cat_id": "1",
"p_name": "Papad",
"p_namecode": "[01]Papad",
"p_image":
"p_price": "20",
"p_quantity": "2",
"p_code": "25",
"p_discount": "10",
"p_packing": "2",
"p_type": "small",
"p_status": "1",
"p": [
{
"q_id": "16",
"p_id": "19",
"q_weight": "25-gm",
"q_price": "150",
"q_beg": "50 bunch",
"q_status": "1"
},
{
"q_id": "17",
"p_id": "19",
"q_weight": "50-gm",
"q_price": "200",
"q_beg": "50-bunch",
"q_status": "1"
}
]
},
{
"p_id": "23",
"cat_id": "1",
"p_name": "Palak Papad",
"p_namecode": "[03]Palak",
"p_image":
"p_price": "200",
"p_quantity": "5",
"p_code": "02",
"p_discount": "15",
"p_packing": "4",
"p_type": "small",
"p_status": "1",
"p": [
{
"q_id": "19",
"p_id": "23",
"q_weight": "50- gm",
"q_price": "15",
"q_beg": "50 bunch",
"q_status": "1"
},
{
"q_id": "20",
"p_id": "23",
"q_weight": "1-kg",
"q_price": "30",
"q_beg": "50 bunch",
"q_status": "1"
}
]
}
],
"success": true,
"message": "Category and Sub Category"
}
Try this for json data parsing
String jsonResult = {JSON-RESULT-IN-STRING};
JSONObject data = new JSONObject(jsonResult);
boolean success = data.getBoolean("success");
String message = data.getString("message");
JSONArray detailArray = new JSONArray(data.getString("details"))
for (int i=0; i<detailArray.length(); i++) {
JSONObject detail = detailArray.getJSONObject(i);
String pID = detail.getString("p_id");
String catID = detail.getString("cat_id");
....
....
....
}
First of all, you need to understand your JSON structure. You need GSON gradle for easy to convert your PHP response to java class object.
add this line in app level gradle.
compile 'com.google.code.gson:gson:2.8.2'
To understand your JSON data see image below. It is an exact representation of your data.
Your JSON data contains an array of Details, a boolean value success and String called message. But your Detail array contains another array called p. for better understanding see image below.
Now we are ready to go.
Create Java class P as I created below.
public class P {
public int q_id;
public int p_id;
public String q_weight;
public int q_price;
public String q_beg;
public int q_status;
}
Create new java class Detail. see carefully and create a complete class. you can take reference from the first image.
public class Detail {
public int p_id;
public int cat_id;
public String p_name;
public String p_namecode;
.
.
.
public int p_status;
public ArrayList<P> p;
}
Now we need a final class you can name it anything.
public class Product {
public ArrayList<Detail> details;
public boolean success;
public String message;
}
Now, whenever you receive your PHP response string you can convert it into java object like this.
Product d = new Product();
String response = "your_php_response_goes here";
Gson gson = new Gson();
d = gson.fromJson(response, Product.class);
Your whole response data is inside d object. To retrieve data you can do like this.
String p_name = d.details.get(0).p_name;
int p_quantity = d.deatails.get(0).p_quantity;
There's a way how to set a value chart bar obtained from JSON website like this below??
[
{
"nilai": "1",
"jumlah": "18"
},
{
"nilai": "2",
"jumlah": "2"
},
{
"nilai": "3",
"jumlah": "7"
},
{
"nilai": "4",
"jumlah": "6"
},
{
"nilai": "5",
"jumlah": "3"
}
]
that's nilai is constant and the jumlah may changed the value,
I've reference from here but it's offline data.
I've tried to find any tutorial on internet, but the clue is scrimpy,
I'm using this code to try but i'm stuck at how to change AddValuesToBARENTRY() to my jumlah and AddValuesToBarEntryLabels() to my nilai from here
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String jumlah = c.getString("jumlah");
String nilai = c.getString("nilai");
HashMap<String, String> contact = new HashMap<>();
contact.put("id", nilai);
contact.put("name", jumlah);
contactList.add(contact);
I created an app that stream video from server, on server side (PHP) I use this code to pass the MySQL query result via JSON array contain a result of video title size and views.
$query="select * from video_tble ;";
$result=mysqli_query($con,$query);
$row=mysqli_fetch_all($result,MYSQLI_ASSOC);
$respones_result=array();
$response_result=$row;
echo json_encode(array("server_response_result"=>$response_result));
But I don't know how to retrieve a multidimensional array using JSON object.
JSONObject jsonObject1=new JSONObject(json);
JSONArray jsonArray1=jsonObject1.getJSONArray("server_response_result");
JSONObject JO1=jsonArray1.getJSONObject(0);
String [] title =...?
If it was a name value pair then I follow this strategy:
String title1=JO1.getString("title");
But I don't know what to do on multidimensional array.
Hi you need a for loop like this
for(int i;i<jsonArray1.size();i++){
JSONObject JO1=jsonArray1.getJSONObject(i);
String title1=JO1.getString("title");
}
To parse this json
{
"server_response_result": [{
"videoid": "1",
"videotitle": "Metro Shoes",
"userid": "7",
"category": "Fashion",
"dou": "0000-00-00",
"rate": "3",
"vstatus": "A",
"vcount": "321",
"location": "adstreamer\\uploads\\ramesh#gmail.com\\1.mp4"
}, {
"videoid": "2",
"videotitle": "Lijn the bus",
"userid": "7",
"category": "App",
"dou": "0000-00-00",
"rate": "4",
"vstatus": "A",
"vcount": "145",
"location": "adstreamer\\uploads\\ramesh#gmail.com\\2.mp4"
}]
}
You have to do following steps (saying you have the server response in jsonObject.
ArrayList<SomeModel> modelList = new ArrayList<>();
JSONArray serverResponseResult = jsonObject.getJsonArray("server_response_result");
for (int i = 0; i < serverResponseResult.length(); i++) {
JSONObject result = serverResponseResult.get(i);
String videoId = result.getString("videoid");
String videoTitle = result.getString("videotitle");
...
// instead of using String, set the values in the model class
modelList.add(/* model */);
}
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn't work, and the expected results. See also: Stack Overflow question checklist
Closed 9 years ago.
Improve this question
#Override
protected String doInBackground(String... params) {
try{
JSONParser jParser = new JSONParser();
String url="http://earlykid.com/android/?page=2";
IdArray=jParser.getJSONFromUrl(url);
Log.e("Fetch Data",IdArray.toString());
mLatestList.clear();
for(int i=0;i<IdArray.length();i++){
try{
JSONObject jObject;
mKids=new Kids();
jObject=IdArray.getJSONObject(i);
mKids.SetTotalPages(jObject.getString("totalItems"));
mKids.SetCurrentPage(jObject.getString("currentPage"));
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
Log.e("log_tag", "Failed data was:\n" + IdArray);
}
}
}catch(Exception e){
}
return null;
}
#Override
protected void onPostExecute(String result) {
mProgress.dismiss();
}
When i fetch the data from this code.it shows me error.
Logcat here:-
error parsing data org.json.JSONException: Value {"totalItems":38,"currentPage":"2","items":[{"id":"Atb1lE9_wzk","title":"ABCD Alphabets Song - Songs for Kids","category":"Education","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/Atb1lE9_wzk\/hqdefault.jpg"},{"id":"UXeeSU0QNro","title":"The rich man and his sons story - Animated Stories for Kids","category":"Education","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/UXeeSU0QNro\/hqdefault.jpg"},{"id":"HmiyKDYrELk","title":"Here we go round the mulberry bush - Nursery Rhyme for Kids","category":"Education","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/HmiyKDYrELk\/hqdefault.jpg"},{"id":"9TLnCurMs5c","title":"Old Mac Donald had a farm - Nursery Rhymes for Kids","category":"Education","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/9TLnCurMs5c\/hqdefault.jpg"},{"id":"DPQ_5GR_MMo","title":"Five Little Monkeys jumping on the bed - Nursery Rhymes","category":"Education","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/DPQ_5GR_MMo\/hqdefault.jpg"},{"id":"CvwHp2xFlJw","title":"Rain Rain go away - Nursery Rhyme","category":"Education","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/CvwHp2xFlJw\/hqdefault.jpg"},{"id":"WEVA9iF6i3s","title":"I'm a little teapot Nursery Rhyme with lyrics","category":"Education","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/WEVA9iF6i3s\/hqdefault.jpg"},{"id":"TQHyRssAM5Y","title":"Ten little fingers ten little toes - Nursery Rhyme","category":"Education","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/TQHyRssAM5Y\/hqdefault.jpg"},{"id":"fDGOlmgF1NE","title":"Jingle Bells Christmas Song","category":"Education","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/fDGOlmgF1NE\/hqdefault.jpg"},{"id":"Y83fbhN6FBk","title":"Pussy Cat Pussy Cat where have you been? - Nursery Rhyme","category":"Film","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/Y83fbhN6FBk\/hqdefault.jpg"},{"id":"UuqNHZEIwEI","title":"Thank you for the world so sweet - Kids Song","category":"Film","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/UuqNHZEIwEI\/hqdefault.jpg"},{"id":"g0u1iWUmg8Q","title":"Ding dong bell - Nursery Rhyme","category":"Film","thumbnail":"http:\/\/www.earlykid.com\/android\/timthumb.php?w=600&h=330src=http:\/\/i1.ytimg.com\/vi\/g0u1iWUmg8Q\/hqdefault.jpg"}]
What you are getting is a JSONObject from this url http://earlykid.com/android/?page=2
You have this
IdArray=jParser.getJSONFromUrl(url); // wrong. you get a json object
{ represents a json object node
[ represents a json array node
Your json
{
"totalItems": 38,
"totalPages": 3,
"itemsPerPage": 12,
"currentPage": "2",
"items": [
{
"id": "Atb1lE9_wzk",
"category": "Education",
"title": "ABCD Alphabets Song - Songs for Kids",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/Atb1lE9_wzk/hqdefault.jpg"
},
{
"id": "UXeeSU0QNro",
"category": "Education",
"title": "The rich man and his sons story - Animated Stories for Kids",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/UXeeSU0QNro/hqdefault.jpg"
},
{
"id": "HmiyKDYrELk",
"category": "Education",
"title": "Here we go round the mulberry bush - Nursery Rhyme for Kids",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/HmiyKDYrELk/hqdefault.jpg"
},
{
"id": "9TLnCurMs5c",
"category": "Education",
"title": "Old Mac Donald had a farm - Nursery Rhymes for Kids",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/9TLnCurMs5c/hqdefault.jpg"
},
{
"id": "DPQ_5GR_MMo",
"category": "Education",
"title": "Five Little Monkeys jumping on the bed - Nursery Rhymes",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/DPQ_5GR_MMo/hqdefault.jpg"
},
{
"id": "CvwHp2xFlJw",
"category": "Education",
"title": "Rain Rain go away - Nursery Rhyme",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/CvwHp2xFlJw/hqdefault.jpg"
},
{
"id": "WEVA9iF6i3s",
"category": "Education",
"title": "I'm a little teapot Nursery Rhyme with lyrics",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/WEVA9iF6i3s/hqdefault.jpg"
},
{
"id": "TQHyRssAM5Y",
"category": "Education",
"title": "Ten little fingers ten little toes - Nursery Rhyme",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/TQHyRssAM5Y/hqdefault.jpg"
},
{
"id": "fDGOlmgF1NE",
"category": "Education",
"title": "Jingle Bells Christmas Song",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/fDGOlmgF1NE/hqdefault.jpg"
},
{
"id": "Y83fbhN6FBk",
"category": "Film",
"title": "Pussy Cat Pussy Cat where have you been? - Nursery Rhyme",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/Y83fbhN6FBk/hqdefault.jpg"
},
{
"id": "UuqNHZEIwEI",
"category": "Film",
"title": "Thank you for the world so sweet - Kids Song",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/UuqNHZEIwEI/hqdefault.jpg"
},
{
"id": "g0u1iWUmg8Q",
"category": "Film",
"title": "Ding dong bell - Nursery Rhyme",
"thumbnail": "http://www.earlykid.com/android/timthumb.php?w=600&h=330src=http://i1.ytimg.com/vi/g0u1iWUmg8Q/hqdefault.jpg"
}
]
}
Parsing
try {
JSONObject jb = new JSONObject(myjsonstring);
String totalitems = jb.getString("totalItems");
Log.i("......", "" + totalitems);
String totalpages = jb.getString("totalPages");
String itemsPerPage = jb.getString("itemsPerPage");
String currentPage = jb.getString("currentPage");
JSONArray jarr = jb.getJSONArray("items");
for (int i = 0; i < jarr.length(); i++) {
JSONObject jb1 = jarr.getJSONObject(i);
String id = jb1.getString("id");
String categoy = jb1.getString("category");
String title = jb1.getString("title");
String pic = jb1.getString("thumbnail");
Log.i("........", id);
}
} catch (Exception e) {
}
Try this :
JsonObject oJsonObject = new JSONObject(myjsonstring);
if(oJsonObject.has("items"))
{
oJsonArray = oJsonObject.getJSONArray("items");
for(int i = 0; i < oJsonArray.length(); i++)
{
String id = oJsonArray.getJSONObject(i).getString("id");
String title = oJsonArray.getJSONObject(i).getString("title");
String category = oJsonArray.getJSONObject(i).getString("category");
String thumbnail = oJsonArray.getJSONObject(i).getString("thumbnail");
}
}
Actually in your JSON you have missed a } at the end of JOSN data so it is not a vlid JSON which you have posted over here
user can add items to cart and simultaneously an url will be fired and an json will be returned..user can add any number of products..each product has an unique product_id.now each product can have many suppliers..suppliers also have unique supplier_id..for all the items added into the cart supplier may be common for few..say we have 5products into cart and..supllier1(having unique id) supplies 3products and supplier2(having unique id) supplies 2products..now i have found out and added unique supplier_id's in a array list..in each json object there is a field called price..I have to add the prices for a unique supplier..so for 2suppliers 2 seperate prices will be shown..(1st for supplier1 by adding prices of 3products he supplies)and other for supplier2..
part of json is
{
"BasketItemID": "4455",
"BasketID": "11",
"ProductID": "12909",
"Qty": "1",
"SupplierID": "7",
"Code": "END10-001",
"Name": "ENDO STOPPERS (100)",
"Price": "5.72",
"GST": "0.64",
"PriceGST": "6.36",
"Brand": "DENT AMERICA",
"Thumbnail": null,
},
{
"BasketItemID": "4464",
"BasketID": "11",
"ProductID": "12914",
"Qty": "1",
"SupplierID": "7",
"Code": "INS52-361",
"Name": "AMALGAM GUN CVD 45' PLASTIC",
"Price": "17.00",
"GST": "1.70",
"PriceGST": "18.70",
"Brand": "LARIDENT",
"Thumbnail": null,
},
{
"BasketItemID": "4465",
"BasketID": "11",
"ProductID": "13863",
"Qty": "1",
"SupplierID": "5",
"Code": "9516068",
"Name": "Tofflemire Bands #3 0015 Pkt 12",
"Price": "2.24",
"GST": "0.22",
"PriceGST": "2.47",
"Brand": "Rand",
"Thumbnail": null,
},
so how can i add the prices?
If your problem revolves around parsing a JSON array you may want to check out the example here. Then you would filter by supplier, feel free to let me expand if you want to make your requirements more explicit.
It would look something like this (not tested)
Integer id;
Map<Integer, Double> sums;
...
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("SupplierID")) {
id = reader.nextInt();
} else if (name.equals("Price")) {
if(!sums.containsKey(id)){
sums.put(id, reader.nextDouble());
}
else{
Double f = (Double) sums.get(id);
sums.put(id, f+reader.nextDouble());
}
} else {
reader.skipValue();
}
}