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:

  1. nom
  2. variete
  3. recolte
  4. .variete
  5. .recolte
  6. . . . .
  7. nom
  8. variete
  9. 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

Popular posts from this blog

java - Custom OutputStreamAppender not run: LOGBACK: No context given for <MYAPPENDER> -

java - UML - How would you draw a try catch in a sequence diagram? -

c++ - No viable overloaded operator for references a map -