Android,Retrofit:通过多个网址获取API数据

时间:2017-11-24 22:54:45

标签: android retrofit

所以我试图从API获取json数据,但问题是它只包含导致实际数据的URL。例如:

// 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...
  ]
}

当您转到实际项目时,它会包含我需要的数据,但某些数据会再次出现在不同的网址下,例如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);
}

嵌套调用还是其他方式?

1 个答案:

答案 0 :(得分:0)

在某些项目中,我们需要从多个网址中获取数据。嵌套调用是解决此问题的合适解决方案,您还可以添加更多Api服务来处理动态URL请求。使用@url注释将Retrofit 2.0支持请求url作为参数。

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