Rxjava merge的使用

Merge其实只是将多个Obsevables的输出序列变为一个,方便订阅者统一处理,对于订阅者来说就仿佛只订阅了一个观察者一样。
例子:在同一页面上获取豆瓣电影、豆瓣电视剧、豆瓣音乐、豆瓣图书的内容列表
public void getAllList(String baseUrl,String tvTag,String musicTag,String bookTag,int count,int start){
        lists = new ArrayList<List<SubjectBody>>();
        Observable movieObservable = mBookModel.getMovieList(baseUrl,count,start);
        Observable tvObservable = mBookModel.getTvList(baseUrl,tvTag,count,start);
        Observable musicObservable = mBookModel.getMusicList(baseUrl,musicTag,count,start);
        Observable bookObservable = mBookModel.getBookList(baseUrl,bookTag,count,start);

        Observable.merge(movieObservable,tvObservable,musicObservable,bookObservable)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Object>() {
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Object o) {
                        Log.d(TAG,o.toString());
                        if(o instanceof MovieEntity){
                            Log.d(TAG,((MovieEntity) o).getSubjects().size()+";"+((MovieEntity) o).getSubjects().toString());
                            //电影与电视剧返回相同的数据格式,添加到list时,两个请求会各添加两次,用contains判断不管用
                            movieList = ((MovieEntity) o).getSubjects();
//                            if(!lists.contains(movieList))
                            if(movieList != null && movieList.size() != 0)
                                lists.add(movieList);
                            tvList = ((MovieEntity) o).getSubjects();
//                            if(!lists.contains(tvList))
                            if(tvList != null && tvList.size() != 0)
                                lists.add(tvList);
                            Log.d(TAG,lists.size()+"list.size()");
                            if(lists != null && lists.size() != 0){
                                mBookView.showMovieList(lists.get(0));
                                mBookView.showTvList(lists.get(lists.size()-1));
                            }
                        }
                        else if(o instanceof MusicEntity){
                            List<Music> musicList = ((MusicEntity) o).getMusics();
                            if(musicList != null && musicList.size() != 0){
                                mBookView.showMusicList(musicList);
                            }
                        }
                        else if(o instanceof BookEntity){
                            List<Book> books = ((BookEntity) o).getBooks();
                            if(books != null && books.size() != 0){
                                mBookView.showBookListNew(books);
                            }
                        }
                    }
                });
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值