【发布时间】:2015-12-28 15:38:05
【问题描述】:
我正在使用 Retrofit 从 Soundcloud-API 获取曲目列表。 请求会导致带有曲目列表的回调 - 无需分页即可。 但是,当我将分页参数 (linked_partitioning=1) 添加到请求时,Retrofit 会返回错误。我无法弄清楚如何编写回调类型以将 URL-String 获取到下一页和我的列表结果。
改造电话:
Map<String, String> queryMap = new HashMap<String, String>();
queryMap.put("client_id" , My_Config.CLIENT_ID);
queryMap.put("tag", "loop" );
queryMap.put("license", "cc-by-sa" );
queryMap.put("limit", "10");
// This is causing a different Return Type ---> ERROR
queryMap.put("linked_partitioning", "1" );
scService = RetrofitRestAdapter.getService();
scService.searchTracks(queryMap, callback); // callback function success is not reached because of the ERROR
GET-Request 接口:
@GET("/tracks")
public void searchTracks(@QueryMap Map<String, String> filters, Callback<List<My_Track>> cb);
改造回调:
Callback<List<My_Track>> callbackTracks = new Callback<List<My_Track>>() {
@Override
public void success(List<My_Track> tracks, Response response) {...}
@Override
public void failure(RetrofitError error) {...}
};
改造例外:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
编辑: Soundcloud API 的结果模式:
没有分页的结果是一个 Array/List of Track-Elements,如下所示:
[{"download_url":null,"key_signature":"","user_favorite":false,...},
{...},{...}]
分页结果是一个包含集合加上next_href的元素:
{"collection":[
{"download_url":null,"key_signature":"",...},
{...},
{...}
],"next_href":"https://..."}
我需要如何声明回调的返回类型以将 Collection-Array 和“next_href”与 Result 分开?
谢谢!
【问题讨论】:
标签: android pagination soundcloud retrofit