2016-07-01 9 views
0

Ich habe ein Problem mit Webservice.Ich JSONObject herunterladen, analysieren und in RecyclerView anzeigen. Ich benutze die Volley-Bibliothek. Mein Code sieht wie folgt aus:Nicht heruntergeladen von Webservice Artikel wird in der ListView angezeigt

@Override 
    protected List<Concert> doInBackground(String... params) { 
     final List<Concert> concerts = new ArrayList<>(); 
     StringRequest request = new StringRequest(Request.Method.GET, "http://krakowskascenamuzyczna.pl/api/koncerty/future/", 
       new com.android.volley.Response.Listener<String>() { 

       @Override 
       public void onResponse(String response) { 
        try { 
         JSONObject responseJSONObject = new JSONObject(response); 
         String arrayString = responseJSONObject.getJSONArray("posts").toString(); 
         JSONArray responseJSONArray = new JSONArray(arrayString); 
         Concert tempConcert; 
         Log.e(TAG, "onResponse: " + responseJSONArray.length()); 
         for (int i = 0; i < responseJSONArray.length(); i++) { 
          tempConcert = new Concert(responseJSONArray.getJSONObject(i).getJSONArray("attachments").getJSONObject(0).getJSONObject("images").getJSONObject("full").getString("url"), 
            responseJSONArray.getJSONObject(i).getString("content"), 
            responseJSONArray.getJSONObject(i).getString("date"), 
            responseJSONArray.getJSONObject(i).getString("title"), 
            responseJSONArray.getJSONObject(i).getInt("id"), 
            responseJSONArray.getJSONObject(i).getString("type"), 
            responseJSONArray.getJSONObject(i).getJSONObject("custom_fields").getJSONArray("typ").getInt(0)); 

          concerts.add(tempConcert); 
          Log.e(TAG, "onResponse: size" + concerts.size()); 
         } 

Länge von responseJSONArray ist 10, während Konzerte 3 und ich habe genau 3 Konzerte in meinem recyclerView bekam. Warum wird nicht jedes heruntergeladene Konzert zur Liste hinzugefügt? Sie können direkt extrahieren JSONArray von JSONObject

+0

Ist das Protokoll: inside for-Schleife druckt 10-mal "onResponse Größe" ?? – sJy

+0

Wenn Sie sicher sind, dass Sie zehn Antworten erhalten, sollten Sie sich die Implementierung Ihres RecyclerView ansehen. –

+0

onResponse: Größe "druckt 3 mal. Ich habe festgestellt, dass ich org.json.JSONException: Index 0 außerhalb des Bereichs [0..0) – Bartos

Antwort

1

sollte diese

arbeiten
try { 
    JSONObject jsonObject = new JSONObject(response); 
    JSONArray postsArray = jsonObject.getJSONArray("posts"); 
    JSONObject postObject; 
    Concert tempConcert; 
    JSONArray attachmentArray; 
    JSONObject imageObject; 
    JSONObject fullObject; 
    JSONArray typArray; 
    JSONObject customFieldObject; 
    for (int i = 0; i < postsArray.length(); i++) { 
     postObject = postsArray.getJSONObject(i); 
     tempConcert = new Concert(); 
     tempConcert.setId(postObject.getInt("id")); 
     tempConcert.setTitle(postObject.getString("title")); 
     attachmentArray = postObject.getJSONArray("attachments"); 
     if (attachmentArray != null && attachmentArray.length() > 0) { 
      imageObject = ((JSONObject) attachmentArray.get(0)).getJSONObject("images"); 
      if (imageObject != null) { 
       fullObject = imageObject.getJSONObject("full"); 
       if (fullObject != null) { 
        tempConcert.setUrl(fullObject.getString("url")); 
       } 
      } 
     } 
     tempConcert.setContent(postObject.getString("content")); 
     tempConcert.setDate(postObject.getString("date")); 
     tempConcert.setType(postObject.getString("type")); 
     customFieldObject = postObject.getJSONObject("custom_fields"); 
     if (customFieldObject != null) { 
      typArray = customFieldObject.getJSONArray("typ"); 
      if (typArray != null && typArray.length() > 0) { 
       tempConcert.setTyp((String) typArray.get(0)); 
      } 
     } 
     concerts.add(tempConcert); 
    } 
    Log.e("tag", "onResponse: size" + concerts.size()); 
} catch (JSONException e1) { 
    e1.printStackTrace(); 
    Log.d("TAG", "Exception caught : " + e1); 

} 
+0

typ ist Integer also linetempConcert.setTyp ((String) typArray.get (0)); Ich habe geändert in tempConcert.setTyp ((int) typArray.get (0)); aber ich bekomme java.lang.ClassCastException: java.lang.String kann nicht in java.lang.Integer umgewandelt werden – Bartos

+0

Eine kleine Modifikation und funktioniert perfekt :) Vielen Dank !!! Du hast meinen Tag gerettet! :) – Bartos

1

Ich hatte nicht den Punkt

String arrayString = responseJSONObject.getJSONArray("posts").toString(); 

JSONArray responseJSONArray = new JSONArray(arrayString); 

zu tun.

diesen Code Versuchen

JSONObject jsonObject = new JSONObject(response); 
JSONArray postsArray = jsonObject.getJSONArray("posts"); 
JSONObject postObject; 
for (int i = 0; i < postsArray.length(); i++) { 
    postObject = postsArray.getJSONObject(i); 
    int id = postObject.getInt("id"); 
    String title = postObject.getString("title"); 
    Log.d("TAG", "#" + i); 
    Log.d("TAG", "ID : " + id + ", title : " + title); 
} 

ich diese bekam im Android Studio Logcat

enter image description here

Wie man deutlich die Zählung 10.

hoffe, das hilft zu sehen.

+0

Danke, ich habe es auf Ihre Art und Weise gemacht, habe aber immer noch nur 3 Elemente:/ – Bartos

+0

Erhalten Sie eine Ausnahme? – apersiankite

+0

org.json.JSONException: Index 0 außerhalb des Bereichs [0. .0) – Bartos

Verwandte Themen