Rxjava的使用

2019-02-17  本文已影响0人  君袅

1.依赖

    implementation 'com.amitshekhar.android:rx2-android-networking:1.0.0'
     //rxjava
    implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

2.代码
1.一个接口的请求

Rx2AndroidNetworking.get("http://c.m.163.com/nc/article/list/T1371543208049/0-20.html")
    .addHeaders("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4)")
    .build()
    .getObjectObservable(CBAbean.class)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Consumer<CBAbean>() {
        @Override
        public void accept(CBAbean cbAbean) throws Exception {

            List<CBAbean.T1371543208049Bean> beans = cbAbean.getT1371543208049();
            list.addAll(beans);
            myAdapter.notifyDataSetChanged();

        }
    }, new Consumer<Throwable>() {
        @Override
        public void accept(Throwable throwable) throws Exception {
            Log.d(TAG, "accept: "+throwable.getMessage());
        }
    });     

2.两个接口的有联系的请求

{
        Rx2AndroidNetworking
                .get("http://www.tngou.net/api/food/list")
                .addQueryParameter("rows", 1 + "")
                .build()
                .getObjectObservable(FoodList.class) // 发起获取食品列表的请求,并解析到FootList
                .subscribeOn(Schedulers.io())        // 在io线程进行网络请求
                .observeOn(AndroidSchedulers.mainThread()) // 在主线程处理获取食品列表的请求结果
                .doOnNext(new Consumer<FoodList>() {
                    @Override
                    public void accept(@NonNull FoodList foodList) throws Exception {
                        // 先根据获取食品列表的响应结果做一些操作
                        Log.e(TAG, "accept: doOnNext :" + foodList.toString());
                        mRxOperatorsText.append("accept: doOnNext :" + foodList.toString()+"\n");
                    }
                })
                .observeOn(Schedulers.io()) // 回到 io 线程去处理获取食品详情的请求
                .flatMap(new Function<FoodList, ObservableSource<FoodDetail>>() {
                    @Override
                    public ObservableSource<FoodDetail> apply(@NonNull FoodList foodList) throws Exception {
                        if (foodList != null && foodList.getTngou() != null && foodList.getTngou().size() > 0) {
                            return Rx2AndroidNetworking.post("http://www.tngou.net/api/food/show")
                                    .addBodyParameter("id", foodList.getTngou().get(0).getId() + "")
                                    .build()
                                    .getObjectObservable(FoodDetail.class);
                        }
                        return null;

                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<FoodDetail>() {
                    @Override
                    public void accept(@NonNull FoodDetail foodDetail) throws Exception {
                        Log.e(TAG, "accept: success :" + foodDetail.toString());
                        mRxOperatorsText.append("accept: success :" + foodDetail.toString()+"\n");
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(@NonNull Throwable throwable) throws Exception {
                        Log.e(TAG, "accept: error :" + throwable.getMessage());
                        mRxOperatorsText.append("accept: error :" + throwable.getMessage()+"\n");
                    }
                });

    }

3。Retrofit+Rxjava

 public interface IFoodService{
    @GET("article/list/0/json?cid=60")
    Observable<ResponseBody> getCall();  //这里不同
}

public void qingqiu(){

    Retrofit build = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .baseUrl("http://www.wanandroid.com/")
            .build();

    IFoodService iFoodService = build.create(IFoodService.class);
    Observable<ResponseBody> call = iFoodService.getCall();
    
    call.subscribeOn(Schedulers.io())             //直接使用rxjava不用再同步异步
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<ResponseBody>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(ResponseBody value) {
                    try {
                        Log.e("zll", "onNext: "+value.string());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });

多个接口合并请求

                Observable<QuanWangBady> quangWang = NetManager.getNetManager().getNetService().getQuangWang();
                Observable<Beanner> ceHuaReques = NetManager.getNetManager().getNetService().getCeHuaReques();
                Observable<AdvertisingBean> advertising = NetManager.getNetManager().getNetService(NetConfig.REMEN).getAdvertising();
                Observable.concat(ceHuaReques, advertising,quangWang)
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Observer<Object>() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onNext(Object o) {
                               if(o instanceof Beanner){
                                   Beanner o1 = (Beanner) o;
                                   String s = o1.getBanner().toString();
                                   LogUtil.e("zll",s);
                               }
                               if(o instanceof AdvertisingBean){
                                   AdvertisingBean o1 = (AdvertisingBean) o;
                                   LogUtil.e("zll",o1.toString());
                                }
                               if(o instanceof QuanWangBady){
                                   QuanWangBady o1 = (QuanWangBady) o;
                                   LogUtil.e("zll",o1.getData().toString());
                               }
                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onComplete() {

                            }
                        });

在一个集合中加一个新的集合显示

public Observable<List<Info>> getInfos(Integer cursor, Integer limit, String labelId) {
  return getService().getInfos(cursor, limit, false, labelId).map(new Function<Page<Info>, List<Info>>() {
    @Override
    public List<Info> apply(Page<Info> infoPage) throws Exception {
      return infoPage.records;
    }
  }).filter(new Predicate<List<Info>>() {
    @Override
    public boolean test(List<Info> infos) throws Exception {
      return cursor == 1;
    }
  }).flatMap(new Function<List<Info>, ObservableSource<List<Info>>>() {
    @Override
    public ObservableSource<List<Info>> apply(List<Info> infos) throws Exception {
      return getSubjectList().map(new Function<List<SubJectBean>, List<Info>>() {
        @Override
        public List<Info> apply(List<SubJectBean> subJectBeans) throws Exception {
          if (subJectBeans.size() > 0) {
            Info info = new Info();
            info.recruitmented = "123";
            info.articleTopics = subJectBeans;
            if (infos.size() > 0) {
              infos.add(1, info);
            } else {
              infos.add(0, info);
            }
          }
          return infos;
        }
      });
    }
  });
上一篇 下一篇

猜你喜欢

热点阅读