2016-04-19 1 views
2

ich ein Problem mit einem API mit, die entweder Array oder Objekt zurückgeben könnten, sind unter das Datenformat:Wie mit Retouren umzugehen, kann OBJECT oder ARRAY mit Retrofit 2 sein?

OBJECT Format:

{ 
    "info":"no package", 
    "time":"04-20-2016" 
} 

ARRAY Format:

[ 
    { 
     "package_id":"1234", 
     "from":"CA", 
     "arrive_time":"05-02-2016" 
    }, 
    { 
     "package_id":"4567", 
     "from":"DE", 
     "arrive_time":"05-04-2016" 
    } 
] 

Nach checked einige Beiträge (Custom converter for Retrofit 2, Multiple converters with Retrofit 2), ich habe eine Ahnung, dass es sollte mit Gson Deserializer oder Custom Converter behandelt werden, aber mein Fall scheint ein wenig anders. Dann, wie man damit umgeht? Danke im Voraus.

Update: Ändern Sie das Beispiel in einen geeigneteren.

+0

Mögliche Duplikat [Handle verschiedene JSON Antworttypen von denselben Endpunkt in RetroFit] (http://stackoverflow.com/questions/35381646/handle-different-json-response-types -von-same-endpoint-in-retrofit) – Exaqt

+0

@Exaqt ja, das ist eine Lösung, aber meiner Meinung nach mit benutzerdefinierten Konverter oder TypeAdater wäre anständig. –

Antwort

0

Chaosphinx

Ich bin damit einverstanden, Ihr Problem aus diesen Beiträgen unterscheiden, die Sie verwiesen haben.

Ihre erste JSON hat Informationen über und Ausnahme in Ihrer Anfrage und die zweite wird zurückgegeben, wenn Ihre Anfrage erfolgreich war. Ich kann Ihnen vorschlagen, den HTTP-Antwortcode vorher zu überprüfen, um den Json zu konvertieren. Wenn der Code 202 (java.net.HttpURLConnection.HTTP_OK) lautet, ist dies der Fall, weil Ihre Anfrage erfolgreich war und die API den zweiten Json zurückgibt, den Sie in das Objekt konvertieren. Wenn der Code etwas anderes ist, liegt eine Ausnahme vor und Sie sollten sich anders damit befassen.

Ein Beispiel:

  Response<List<MyObject>> response = myResource.myMethod().execute(); 
      switch (response.code()) { 
       case HTTP_OK: 
        return response.body(); 
       default: 
        //OPS! Request has failed! 
      } 
+0

Hallo, in der Tat ist es keine Ausnahme, sondern eine erfolgreiche Rückkehr. Die API ist nur so konzipiert (nicht von mir). Ich habe das Beispiel in ein geeigneteres geändert. Ich denke, es ist sehr ähnlich zu den Links, auf die ich verwiesen habe, ich kann es einfach nicht herausfinden. –

+0

Also, das ("info": "no package") bedeutet nicht, dass Ihre Anfrage als Antwort eine NO_CONTENT (Code 204) hatte? – YoungerAuad

+0

Richtig, es ist eine normale HTTP_OK Antwort. –

Verwandte Themen