2017-05-24 1 views
-1

Ich versuche, die Elemente (die Bücher) der Google Books-API mit Gson zu analysieren, aber aus irgendeinem Grund bleibt die JsonArray-Größe auf 10, wenn ich versuche, auf einen Index größer als zuzugreifen dass es abstürzen wird, aber es sollte mehr als 10000 Objekte im Array geben. Ich habe versucht, es mit der JSON-Bibliothek aus dem Android Studio zu analysieren, aber ich hatte genau den gleichen Fehler.JSON-Array-Größe bleibt bei 10

public String parse(String jsonLine) { 
    JsonElement jelement = new JsonParser().parse(jsonLine); 

    System.out.println("jelement " + jelement.toString()); 
    System.out.println("Number of objects " + jelement.getAsJsonObject().get("totalItems")); 
    JsonObject jobject = jelement.getAsJsonObject(); 
    System.out.println("jobject " + jobject.toString()); 
    JsonArray jarray = jobject.getAsJsonArray("items"); 
    jobject = jarray.get(500).getAsJsonObject(); 

Und der Fehler:

Number of objects 10275

FATAL EXCEPTION: main Process: java.lang.IndexOutOfBoundsException: Invalid index 500, size is 10

+0

können Sie zeigen uns die Antwort haben jsonLine? –

+0

Weil Elemente jsonArray nur 10 Objekte haben, während Sie den Wert von index 500 erhalten. – ashish

+0

Sie drucken totalItems und greifen dann auf Objekte zu - warum sollten diese dieselben sein? – csmckelvey

Antwort

0

Ich denke, diese API paginierte API ist, was bedeutet, zum Beispiel, sagen wir, Sie einen Anruf für Google Books-API machen.

Jetzt kann es Tausende/Millionen von Büchern geben. API-Aufruf: Aber für die effiziente Implementierung der API, könnten sie nur die ersten 10 Bücher,

Beispiel senden http://www.somewebsite.com/api/books Das Ergebnis wird ein Ergebnis von 10 Pfund sein. Aber die JSON hat insgesamt Bücher zählen. Also das können Sie sich das paginierte API zugreifen

{ 
    totalBooks: 100, 
    books: [ 
    { 
     //Book1 
    }, 
    { 
     //Book2 
    } 
    ] 
} 

So, jetzt gibt es 100 Bücher, aber nach wie vor erhalten Sie nur 10 Bücher. So 55. Buch zugreifen, können Sie eine Anfrage wie API machen müssen: http://www.somewebsite.com/api/books/5

Antwort auf diese API-Aufruf wird Bücher von 51 bis 60.

{ 
    totalBooks: 100, 
    books: [ 
    { 
     //Book51 
    }, 
    { 
     //Book52 
    } 
    ] 
} 
+0

Ich denke, das ist der Grund, ich werde testen und mit den Ergebnissen zurückkommen Dank –

+0

Das ist toll :) – Siva

+0

Das war es, danke perfekte Antwort –