2017-11-24 6 views
0

APIからjsonデータを取得しようとしていますが、実際のデータにつながるURLが含まれているだけです。例:Android、Retrofit:複数のURLを経由してAPIデータを取得する

// e.g. base url api.someapi.com/v0/ 
{ 
    "count": 246, 
    "results": [ 
    { 
     "href": "https://api.someapi.com/v0/items/akluhdkunsduawhbd", 
     "name": "item A" 
    }, 
    { 
     "href": "https://api.someapi.com/v0/items/fgluorkunfythmhbc", 
     "name": "item B" 
    }, 
    // more stuff... 
    ] 
} 

実際の項目に移動すると、必要なデータが表示されますが、そのデータの一部は再び別のURLになります。 https://api.someapi.com/v0/items/fgluorkunfythmhbc/type/esgrtesrsuykbdv

リスト内の各項目を詳細に表示するには、どのようにデータを取得すればよいですか?

Call<Collection> call = api.getCollection(); 
call.enqueue(new Callback<Collection>() { 
    @Override 
    public void onResponse(Call<Collection> call, Response<Collection> response) { 
     ArrayList<CollectionData> collectionDataList = response.body().getResults(); 
     // Can get urls of each item but how to get the data? 
    } 

    @Override 
    public void onFailure(Call<Collection> call, Throwable t) { 
     Log.e(TAG, t.getMessage()); 
    } 
}); 

コレクションクラス:

public class Collection { 
    @SerializedName("count") 
    @Expose 
    private String count; 

    @SerializedName("results") 
    @Expose 
    private ArrayList<CollectionData> results; 

    public String getCount() { 
     return count; 
    } 

    public void setCount(String count) { 
     this.count = count; 
    } 

    public ArrayList<CollectionData> getResults() { 
     return results; 
    } 

    public void setResults(ArrayList<CollectionData> results) { 
     this.results = results; 
    } 
} 

ApiServiceインタフェース:

public interface ApiService { 
    @Headers("Content-Type: application/json") 
    @GET("items") 
    Call<Collection> getCollection(); 

    @Headers("Content-Type: application/json") 
    @GET("items/{id}") 
    Call<Card> getItem(@Path("id") String id); 
} 

ネストされた呼び出しや他のいくつかの方法

私は現在、このようなものがありますか?

答えて

0

いくつかのプロジェクトでは、複数のURLからデータを取得する必要があります。入れ子にされた呼び出しは、この問題に適したソリューションです。また、動的urlリクエストを処理するApiサービスを追加することもできます。 Retrofit 2.0は、@ urlアノテーション付きのパラメータとしてurlをリクエストできます。

@Headers("Content-Type: application/json") 
    @GET 
    Call<Card> getItem(@url string url , @Path("id") String id); } 
関連する問題