我正在使用Spotify API,並希望使用RxJava鏈接幾個分頁結果。 Spotify使用基於光標的分頁,所以像the one from @lopar這樣的解決方案將無法工作。RxJava和基於光標的RESTful分頁
響應從this call,看起來是這樣的(想象有50 items
):
{
"artists" : {
"items" : [ {
"id" : "6liAMWkVf5LH7YR9yfFy1Y",
"name" : "Portishead",
"type" : "artist"
}],
"next" : "https://api.spotify.com/v1/me/following?type=artist&after=6liAMWkVf5LH7YR9yfFy1Y&limit=50",
"total" : 119,
"cursors" : {
"after" : "6liAMWkVf5LH7YR9yfFy1Y"
},
"limit" : 50,
"href" : "https://api.spotify.com/v1/me/following?type=artist&limit=50"
}
}
現在,我得到的前50個結果就是這樣,用改裝:
public class CursorPager<T> {
public String href;
public List<T> items;
public int limit;
public String next;
public Cursor cursors;
public int total;
public CursorPager() {
}
}
public class ArtistsCursorPager {
public CursorPager<Artist> artists;
public ArtistsCursorPager() {
}
}
然後
public interface SpotifyService {
@GET("/me/following?type=artist")
Observable<ArtistsCursorPager> getFollowedArtists(@Query("limit") int limit);
@GET("/me/following?type=artist")
Observable<ArtistsCursorPager> getFollowedArtists(@Query("limit") int limit, @Query("after") String spotifyId);
}
和
mSpotifyService.getFollowedArtists(50)
.flatMap(result -> Observable.from(result.artists.items))
.flatMap(this::responseToArtist)
.sorted()
.toList()
.subscribe(new Subscriber<List<Artist>>() {
@Override
public void onNext(List<Artist> artists) {
callback.onSuccess(artists);
}
// ...
});
我想在callback.success(List<Artist>)
中返回所有(本例中爲119)藝術家。我是RxJava的新手,所以我不確定是否有智能這樣做。
您是否知道在撥打此電話之前您要檢索的藝術家總數?如果你知道之前的大小,那麼使用'Observable.range(0,ARTIST_SIZE).buffer(YOUR_LIMIT)'你可以很容易地找回 –
@AkbarShaEbrahim你不僅沒有讀過我的問題,它清楚地表明這個例子是119.不是你只是忽略了我指定的基於光標的分頁 - 這意味着你永遠不知道總數。最糟糕的是,你給了我一個答案,我在問題本身上連接。什麼也沒有。 –
看看我的回答應該對你有幫助。 –