2016-08-21 2 views
1

I Retrofit bin mit Daten aus einer API zu holen, die JSON-Objekte in diesem Format zurückgibt:geschachtelte Objekte: Same Geordnetes Objekt für mehrere Child-Objekte

{ 
    "error": 0 
    "message": "Request Successful" 
    "data": [ ... ] 
} 

ich es mit Gson holen mit diesen Klassen Pojo:

public class SearchResponse { 
    @SerializedName("error") 
    @Expose 
    private Integer error; 
    @SerializedName("message") 
    @Expose 
    private String message; 
    @SerializedName("data") 
    @Expose 
    private List<SearchResult> data; 

    (Getter and Setter here) 
} 


public class SearchResult { 
    @SerializedName("name") 
    @Expose 
    private String name; 
    @SerializedName("id") 
    @Expose 
    private Integer id; 
    .... 

    (Getter and Setter here) 
} 

das Problem ist, dass für jede Anfrage ich, dass ich zwei neue Klassen machen machen, auch wenn die äußere Klasse immer die gleichen drei Variablen enthält: "error", "message" und "data". Gibt es eine Möglichkeit, dasselbe Elternteil für jedes Kind zu verwenden, ohne es vollständig zu entfernen? (Ich brauche noch das "message" Feld)

Antwort

0

Sie Generika verwenden können:

public class SearchResponse<T> { // T is a type variable 
    @SerializedName("error") 
    @Expose 
    private Integer error; 
    @SerializedName("message") 
    @Expose 
    private String message; 
    @SerializedName("data") 
    @Expose 
    private List<T> data; // We have a list of T 

    (Getter and Setter here) 
} 

Sie würden deserialisieren wie:

Type t = new TypeToken<SearchResponse<SearchResult>>(){}.getType(); 
SearchResponse<SearchResult> response = gson.fromJson(jsonString, t); 

Sie noch einen TypeToken für jedes Kind machen würde, obwohl geben.

Verwandte Themen