java - failed to process json data in android -
[{"acteurid":"86744570","productions":[{"variete":"riz","recolte":"10000"}],"nom":"charles diouf"},{"acteurid":"6535150","productions":[{"variete":"riz","recolte":"1000"}],"nom":"daba diouf"},{"acteurid":"86817462","productions":[{"variete":"riz","recolte":"8000"}],"nom":"diel ndour"},{"acteurid":"14047190","productions":[{"variete":"ble","recolte":"10000"},{"variete":"mais","recolte":"1000"},{"variete":"mais","recolte":"2000"},{"variete":"riz","recolte":"5000"},{"variete":"ble","recolte":"8000"}],"nom":"hamady diouf"}]
how read above json data? want display in listview
follows:
- nom
- variete
- recolte
- .variete
- .recolte
- . . . .
- nom
- variete
- recolte
i tried following code list isn't showing. have
fatal exception: main java.lang.nullpointerexception @ pcom.jsontest.mycustomadapter.getview(mycustomadapter.java:32)
code is
for(int i=0;i<jarray.length();i++){ jsonobject json=jarray.getjsonobject(i); jsonarray prodar=json.getjsonarray("productions"); for(int j=0;j<prodar.length();j++){ jsonobject prod=prodar.getjsonobject(j); production production = new production(prod.getstring("variete"),prod.getstring("recolte")); productions.add(production); } producteur producteur=new producteur(json.getstring("acteurid"),productions,json.getstring("nom")); producteurs.add(producteur); } mycustomadapter adapter = new mycustomadapter(this,producteurs); listview listview = (listview) findviewbyid(r.id.list); listview.setadapter(adapter);
custom array adapter
public class mycustomadapter extends arrayadapter<producteur> { public mycustomadapter(context context, arraylist<producteur> prods) { super(context, 0, prods); } @override public view getview(int position, view convertview, viewgroup parent) { // data item position producteur producteur = getitem(position); // check if existing view being reused, otherwise inflate view if (convertview == null) { convertview = layoutinflater.from(getcontext()).inflate(r.layout.list_item, parent, false); } // lookup view data population textview name = (textview) convertview.findviewbyid(r.id.name); name.settext(producteur.getnom()); arraylist<production> productions=producteur.getproductions(); listview listprod = (listview) convertview.findviewbyid(r.id.list); arrayadapter<production> productionsadapter = new arrayadapter<production>(getcontext(), r.layout.list_prod_item, productions); listprod.setadapter(productionsadapter); // return completed view render on screen return convertview; } }
list_item.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <textview android:id="@+id/nom" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingbottom="2dip" android:paddingtop="6dip" android:textcolor="#43bd00" android:textsize="16sp" android:textstyle="bold" /> <listview android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content"/> </linearlayout>
list_prod_item.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <textview android:id="@+id/variete" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingbottom="2dip" android:paddingtop="6dip" android:textcolor="#43bd00" android:textsize="16sp" android:textstyle="bold" /> <textview android:id="@+id/recolte" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingbottom="2dip" android:paddingtop="6dip" android:textcolor="#43bd00" android:textsize="16sp" android:textstyle="bold" /> </linearlayout>
to complete dilix's example, let's model called producteur
:
public class producteur { // private attributes private int mid; // list of produit, model or object (call want) created you. private list<produit> mproduits; private string mnom; // attributes getters , setters (they optionnal in example, it's idea have them) public int get_mid() { return this.mid; } public void set_mid(int id) { this.mid = id; } public list<produit> get_mproduits() { return this.mproduits; } public void set_mproduits(list<produit> produits) { this.mproduits = produits; } public string get_mnom() { return this.mnom; } public void set_mnom(string nom) { this.mnom= nom; } // constructor public producteur(int id, list<produit> produits, string nom) { this.mid = id; this.mproduits = produits; this.mnom = nom; } }
and have model produit
represent 1 of productor's product:
public class produit { // product has 2 attributes: variete , recolte. i'll let complete // class, can inspire of above example. }
now it's time use these 2 objects in data reading:
// instead of hashmap, we'll using list of "producteur" list<producteur> producteurs = new list<producteur>(); jsonarray jarray=new jsonarray(ressel); //string acteur_id=""; for(int i=0;i<jarray.length();i++){ jsonobject json = jarray.getjsonobject(i); int id = json.getint("acteurid"); // note name not part of "productions" jsonarray string nom = json.getstring("nom"); // here we'll declare productor's productions list<produit> productions = new list<produit>(); jsonarray prodar=json.getjsonarray("productions"); for(int j=0;j<prodar.length();j++){ jsonobject prod=prodar.getjsonobject(j); string variete = prod.getstring("variete"); int recolte = integer.parseint(prod.getstring("recolte")); // we'll create new "produit" @ each loop , add productor's product list. produit unproduit = new produit(variete, recolte); productions.add(unproduit); } // we'll create new productor @ each loop , add productors list producteur unproducteur = new producteur(id, productions, nom); producteurs.add(unproducteur); }
then, add in listview, use arrayadapter<producteur>
:
listview listprod = (listview)findviewbyid(r.id.list); // passe list of "producteur" created above objects represent in listview arrayadapter<producteur> producteursadapter = new arrayadapter<producteur>(this, r.layout.list_item, producteurs); listprod.setadapter(producteursadapter);
note basic way show productors in listview. check this link if want customize objects display.
Comments
Post a Comment