2017-10-10 6 views
0

Es werden nur folgende Fragen zu diesem Thema gestellt 1, 2 aber sie lösen meine Frage nicht.Retrofit 2 Antwort ohne Modell

Frage:

meine api Angenommen bei http://www.example.com/getSomething wird {"Status":"False"} geben.

// desired 
public Apiinter{ 
    @GET("http://www.example.com/getSomething") 
    Observable<Boolean> getSomething(); 
} 

ich so etwas wie Observale<Boolean> wollen als zurückkehrte, ohne zusätzlichen POJO zu machen auf dem Weg, wie man erreichen, dass

Mein Versuch:

ich ein POJO verwenden können/Modell (aber ich will nicht), kann ich JSONObject oder JSONElement zurückgeben, aber das macht nicht Observable<Boolean> als Rückgabewert

+0

mein sein versuchen benutzerdefinierte Konverter. Aber warum nicht POJO? – Raghunandan

+0

das ist nur 1 api Beispiel Ich habe 20+ APIs mit nur 1 Variable als Antwort in JSON zurück, so stellen Sie sich vor, dass viele pojos –

+0

ist es logisch, Sie versuchen, primitive Datentyp nur übergeben. Sie müssen auch Schlüssel übergeben, die Wert zu analysieren haben –

Antwort

0

Um ehrlich zu sein, würde ich immer noch mit mehr als 20 POJOs gehen, aber Sie könnten Ihren eigenen JsonDeserializer hinzufügen (vorausgesetzt, Sie werden GSON für die Analyse Ihrer API-Ergebnisse verwenden). Der Deserializer ich denken kann, sieht etwas in dieser Richtung:

private static class BooleanDeserializer implements JsonDeserializer<Boolean> { 
     @Override 
     public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { 
      JsonObject obj = json.getAsJsonObject(); 
      Set<Map.Entry<String, JsonElement>> entrySet = obj.entrySet(); 
      return ((JsonElement)entrySet.toArray()[0]).getAsBoolean(); 
     } 
    } 

Und Ihre Gson wie diese Einrichtung:

Gson gson = new GsonBuilder() 
       .registerTypeAdapter(Boolean.class, new BooleanDeserializer()).create(); 

Und Ihre RestAdapter:

final RestAdapter.Builder builder = new RestAdapter.Builder() 
       ... 
       .setConverter(gson); 

Sie ist wahrscheinlich wollen Chaos mit ein bisschen herum und natürlich, das spart Ihnen Arbeit nur zu einem gewissen Grad. Ich weiß nicht, wie sich Ihre APIs unterscheiden, aber dies sollte nützlich sein, wenn Sie unterschiedliche API-Strukturen, aber nur einen nützlichen Wert haben.

+0

Ich denke, es könnte die Sache sein, die ich brauche –

+0

Sie sind herzlich willkommen! Ich habe vergessen zu erwähnen, dass du wahrscheinlich Observable anstatt nur Boolean zurückgeben willst (ich wollte das nicht untersuchen, da ich nicht wirklich rx-java beherrsche), aber ich bin mir sicher, dass du es schaffst. – Bjelis