2016-05-28 14 views
1

Ich weiß, dass dies viel gefragt wurde, aber keine der Fragen, die ich gefunden habe, lösen mein spezifisches Problem.Jackson + Gson + Retrofit Erwartete BEGIN_OBJECT aber war BEGIN_ARRAY

Hier ist meine JSON

[JSON URL] [1]

[ 
    {  
    "unit":"IMECA", 
    "value":29, 
    }, 
    { 
    "unit":"IMECA", 
    "value":43, 
    } 
] 

das ist mein DTO

Zona.java

public class Zona { 
    private String unit; 
    private int value; 

    public String getUnit() { 
    return unit; 
    } 

    public void setUnit(String unit) { 
    this.unit = unit; 
    } 

    public int getValue() { 
    return value; 
    } 

    public void setValue(int value) { 
    this.value = value; 
    } 

    @Override 
    public String toString() { 
    return String.valueOf(unit) + ": " + String.valueOf(value); 
    } 
} 

und diese ist meine Schnittstelle

Api.java

public interface Api { 
    @GET("/data/heatmap_stations.json") 
    Call<Zona> getZona(); 
} 

ich irgendwie verstehen von warum es geschieht, weil ein JSON-Array ist die Antwort aber Jackson + Gson sind ein einziges JSON-Objekt erwartet.

ich versuchte, eine POJO wie diese zu schaffen:

Zonas.java

Public class Zonas extends ArrayList<Zona> {} 

und Ändern der Anruf Signatur in der Schnittstelle und dem Retrofit Anrufs, die einzelnen DTO auf die Mehrzahl Ersetzen (von Call < Zona> Call < Zonas>, Ersetzen der einzelnen Klasse, die ArrayList < erbt>), aber es tut einfach nichts, ich meine, es hat keine Ausnahme ausgelöst, aber es hat keine Antwort geworfen entweder.

+0

Es gibt eine Menge von Duplikaten darüber Rückkehr genaue Error. Hinweis: Sie geben ein JSONArray zurück, kein JSONObject, also wollen Sie wahrscheinlich "List " im Call –

+0

Auch Jackson und Gson führen den gleichen Vorgang aus, also bin ich mir nicht sicher, warum Sie beide haben –

Antwort

2

ändern

public interface Api { 
    @GET("/data/heatmap_stations.json") 
    Call<Zona> getZona(); 
} 

zu

public interface Api { 
    @GET("/data/heatmap_stations.json") 
    Call<List<Zona>> getZona(); 
} 

Sie sagen es ein einzelnes Zona Objekt zu erwarten, aber es ist ein Array von Zona Objekte

Verwandte Themen