2016-05-19 6 views
2

APIレスポンスは、アプリケーションのさまざまなアクティビティのデータを一般的に返すものです。できるだけ一般的で柔軟なアプリケーションを作成するために、私たちは活動のさまざまな行を作成するために利用するURLのコレクションを提供するためのAPIをセットアップしました。私たちのベースオブジェクトは、次のようになります。改訂メソッドはワイルドカードを返す

public class BaseApiObject { 

    @SerializedName("apiVersion") 
    private String apiVersion = null; 
    @SerializedName("totalResults") 
    private Integer totalResults = null; 
} 

活動のために私たちの応答は次のようになります。

public class ActivityApiResponse extends BaseApiObject { 
    @SerializedName("results") 
    private List<ScreenItem> results = new ArrayList<>(); 
} 

そしてScreenItemは、次のようになります。

public class ScreenItem extends BaseApiObject { 
    @SerializedName("apiUrls") 
    private List<String> apiUrls = new ArrayList<>() ; 
} 

私が何かをできるようにしたいと思います改造してこのように:

@GET("{url}") 
Call<? extends BaseApiObject> getUrl(@Path("url") String url); 

リクエストごとにBaseApiObjectが返されることはわかっていますが、実際に返すオブジェクトのタイプは不明です。これらのURLの中には、さまざまなタイプのオブジェクトのリストが返されるものがあります。

java.lang.IllegalArgumentException: Method return type must not include a type variable or wildcard: retrofit2.Call<? extends com.company.BaseApiObject> 

このシナリオを処理するためのレトロフィットを持つ方法はありますか私はBaseApiObjectを返し、その後、実際には、適切なオブジェクト型を返すようにカスタムgsonデシリアライザを使用する必要があります:

は、我々は次のエラーを取得します(s)?

答えて

1

結局、自分のデシリアライザを作成する必要がありました。私はJsonDeserializationContextをとり、jsonレスポンスで返された型に基づいて要素を解析しました。私は、ループ内の図形の種類を見て、のようなものだろう、私のデシリアライザで

{ "shapes": 
    [ 
    {"type": "circle", "radius": 2}, 
    {"type": "rectangle", "width": 3, "height": 2}, 
    {"type": "triangle", "sides": [3, 4, 5]} 
    ], 
    "apiVersion": "0.1.0", 
    "totalResults": "3" 
} 

switch(jsonObject.get("type").getAsString()) { 
    case "circle": 
     return context.deserialize(jsonObject, Circle.class); 
     break; 

    case "rectangle": 
     return context.deserialize(jsonObject, Rectangle.class); 
     break; 

    case "triangle": 
     return context.deserialize(jsonObject, Triangle.class); 
     break; 

    default: 
     return context.deserialize(jsonObject, Shape.class); 
     break; 
} 
を私のJSONを想定例えば

は、ように見えました

関連する問題