2017-11-24 7 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에서 데이터를 가져와야합니다. 중첩 된 호출은이 문제에 적합한 솔루션입니다. 또한 API를 추가하여 동적 URL 요청을 처리 할 수 ​​있습니다. 개선 2.0은 @url 주석을 사용하여 매개 변수로 url을 요청할 수 있습니다.

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