2013-08-31 6 views
0

Il semble que quelque chose me manque lorsque j'essaye d'analyser ce JSON. Je continue d'obtenir une erreur No Value pour l'élément JSON. (Voir logcat ci-dessous).Aucune valeur pour JSON PARSE

Voici le JSON je tire du moteur app datastore:

{"items":[{"description":"payment confirmed","emailAddress":"[email protected]","id":"Fri Aug 30 17:20:35 EDT 2013","nameFirst":"Bill","nameLast":"Sanders","phone":"5555555555","state":"KS","streetAddress":"123 Rick Dr","zipCode":"44444","kind":"contactinfoendpoint#resourcesItem"},{"description":"payment confirmed","emailAddress":"[email protected]","id":"Fri Aug 30 17:21:37 EDT 2013","nameFirst":"Frank","nameLast":"Lloyd","phone":"5554567896","state":"KY","streetAddress":"999 Rock St","zipCode":"44555","kind":"contactinfoendpoint#resourcesItem"}],"kind":"contactinfoendpoint#resources","etag":"\"NiDXI3T89oRrAPGJAhgGQje1Z0w/z0W4p01mjHc5cNgcOt3Kb_1xo8E\""} 

Quand je lance ce code je reçois ce dans le LogCat et ma mise en page gonfleur est vide:

08-31 11:11:37.470: E/log_tag(15026): Error parsing data org.json.JSONException: No value for item 

Voici le code de l'activité:

public class FinderActivity extends ListActivity { 


private static final String TAG_ID = "id"; 
private static final String TAG_FIRSTNAME = "nameFirst"; 
private static final String TAG_LASTNAME = "nameLast"; 
private static final String TAG_EMAIL = "emailAddress"; 
private static final String TAG_ADDRESS = "address"; 
private static final String TAG_STATE = "state"; 

private static final String TAG_PHONE = "phone"; 
JSONArray contacts = null; 

ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    new EndpointsTask().execute(getApplicationContext()); 

} 

public class EndpointsTask extends AsyncTask<Context, Integer, Long> { 

    public Long doInBackground(Context... contexts) { 

     Contactinfoendpoint.Builder endpointBuilder = new Contactinfoendpoint.Builder(
      AndroidHttp.newCompatibleTransport(), 
      new JacksonFactory(), 
      new HttpRequestInitializer() { 
      public void initialize(HttpRequest httpRequest) { } 
      }); 
    Contactinfoendpoint endpoint = CloudEndpointUtils.updateBuilder(
    endpointBuilder).build(); 

    try { 

    // final TextView detail = (TextView)findViewById(R.id.textView100); 

    String apples = endpoint.listContactInfo().execute().toString(); 

    JSONObject jObject = new JSONObject(apples); 

      try{ 
     //Get the element that holds the earthquakes (JSONArray) 
     JSONArray contacts = jObject.getJSONArray("item"); 

     for(int i = 0; i < contacts.length(); i++){ 
      JSONObject c = contacts.getJSONObject(i); 

      // Storing each json item in variable 
      String id = c.getString(TAG_ID); 
      String nameFirst = c.getString(TAG_FIRSTNAME); 
      String nameLast = c.getString(TAG_LASTNAME); 
      String email = c.getString(TAG_EMAIL); 
      String address = c.getString(TAG_ADDRESS); 
      String phone = c.getString(TAG_PHONE); 

      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 

      // adding each child node to HashMap key => value 
      map.put(TAG_ID, id); 
      map.put(TAG_FIRSTNAME, nameFirst); 
      map.put(TAG_EMAIL, email); 
      map.put(TAG_PHONE, phone); 

      // adding HashList to ArrayList 
      contactList.add(map); 

     } 

      }catch(JSONException e)  { 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
      } 

      ListAdapter adapter = new SimpleAdapter(FinderActivity.this, contactList, 
        R.layout.main, 
        new String[] { TAG_FIRSTNAME, TAG_EMAIL, TAG_PHONE }, new int[] { 
          R.id.name, R.id.email, R.id.mobile }); 

      setListAdapter(adapter); 

      // selecting single ListView item 
      ListView lv = getListView(); 

    } catch (IOException e) { 
    e.printStackTrace(); 
    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
     return (long) 0; 
    } 


    } 
+0

Quelle est la trace de pile complète de l'exception? Cela vous dira presque certainement quelle valeur il essaie de trouver. – MrLore

+2

semble que ce devrait être "items" et non "item" dans jObject.getJSONArray ("item"); –

Répondre

1

votre nom d'objet n'est pas item son items

Utilisez le code ci-dessous pour obtenir des articles

JSONObject jsonObj = new JSONObject(str); 
JSONArray jsonArr = jsonObj.getJSONArray("items"); 

for(int i =0 ; i<jsonArr.length() ;i++){ 
    JSONObject jsonObj1 = jsonArr.getJSONObject(i); 

    System.out.println(); 
    System.out.println((i+1)+" ==========JSON OBJECT IS :========== "); 

    Iterator<String> iter = jsonObj1.keys(); 
    while(iter.hasNext()){ 
     String key = iter.next(); 
     System.out.println(key + " : " + jsonObj1.get(key)); 


    } 
} 

SORTIE:

1 ==========JSON OBJECT IS :========== 
streetAddress : 123 Rick Dr 
id : Fri Aug 30 17:20:35 EDT 2013 
phone : 5555555555 
nameLast : Sanders 
nameFirst : Bill 
description : payment confirmed 
zipCode : 44444 
state : KS 
emailAddress : [email protected] 
kind : contactinfoendpoint#resourcesItem 

2 ==========JSON OBJECT IS :========== 
streetAddress : 999 Rock St 
id : Fri Aug 30 17:21:37 EDT 2013 
phone : 5554567896 
nameLast : Lloyd 
nameFirst : Frank 
description : payment confirmed 
zipCode : 44555 
state : KY 
emailAddress : [email protected] 
kind : contactinfoendpoint#resourcesItem 
+0

Que devrais-je faire pour que l'Iterator iter stocke chaque information de contact dans une chaîne comme ceci: String id = c.getString (TAG_ID); Chaîne nameFirst = c.getString (TAG_FIRSTNAME); de sorte que pour chaque objet JSON, je reçois un ensemble d'informations de contact réparties en chaînes pour chaque numéro de téléphone, nom, etc. – johnsonjp34

0

l'objet JSON ci-dessus contient un tableau de items.So vous devez d'abord analyser les "éléments", puis le contenu des éléments.

1

Oui. D'abord besoin d'obtenir Array element, puis récupérer les éléments de tableau.

JSONParser parser=new JSONParser(); 

JSONObject jsonObject = (JSONObject)parser.parse(apples); 

JSONArray jsonArr = (JSONArray)jsonObject.get("items"); 

System.out.println("jsonArr.get(0));