从包含List <song>

时间:2017-06-09 09:46:19

标签: android observable retrofit2 rx-android

我有一个班级SongResponse

public class SongResponse implements Parcelable {

    @SerializedName("token")
    public String token;

    @SerializedName("items")
    public List<Song> songList;
}

@GET("songs")
Observable<SongResponse> getSongs(@Query("token") String token)

在经理课程中,我想通过上面的请求

返回Observable
public Observable<Song> syncSongs(token) {

    return mSongService.getSongs(token);
        ....

        @Override
        public Observable<Song> call(List<Song> songs) {
            return mDatabaseHelper.setSongs(songs);
        }

}

syncSongs会调用另一个Observer来在数据库中插入歌曲。

我使用了RxAndroid 2.我尝试找到.map.flatMapIterable,但不会导致我的问题。你能帮我完成这个功能吗?

1 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情:

public Observable syncSongs(token) {
    return mSongService.getSongs(token).flatMap(new Function<SongResponse, ObservableSource<List<Song>>() {
        @Override
        public ObservableSource<List<Song>> apply(@io.reactivex.annotations.NonNull SongResponse songResponse) throws Exception {
            return Observable.just(songResponse.getSongList()); //some changes here
        }
    }).flatMapIterable(new Function<List<Song>, Iterable<? extends Song>>() {
        @Override
        public Iterable<? extends Song> apply(List<Song> songs) throws Exception {
            return songs;
        }
    }).flatMap(new Function<Song, Observable<Song>>() {
        @Override
        public Observable<Song> apply(final Song song) throws Exception {
            return Observable.just(song);
        }
    });
}

希望这有帮助。