所以我试图从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);
}
嵌套调用还是其他方式?
答案 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); }