方法和参数:
public static <T1, T2, R> Observable<R> zip(Observable<? extends T1> o1, Observable<? extends T2> o2, final Func2<? super T1, ? super T2, ? extends R> zipFunction)这里的第一个和第二个都是retrofit返回的两个Observable结果,我们需要把里面的内容取出来拼接成一个新的bean,用于之后的链式。
class GetRealTask extends Thread {//这里是因为我的项目需要轮询,所以新建一个线程,当然也可以用Rxjava的repeatWhen操作符实现更优雅。 volatile boolean stop = false; public void run() { while (!stop) { getData(); SystemClock.sleep(10*1000); } }}
private void getData() { Observable .zip(PRRetrofit.getmInstance().getmPRService().getDetail(did1), PRRetrofit.getmInstance().getmPRService().getDetail(did2), new Func2<DeviceDetailBean, DeviceDetailBean, List<DeviceDetailBean.RealTimeParamsEntity>>() { @Override public List<DeviceDetailBean.RealTimeParamsEntity> call(DeviceDetailBean deviceDetailBean, DeviceDetailBean deviceDetailBean2) { mRealTimeParamsList.clear(); String deviceName = deviceDetailBean.getDeviceName(); for (DeviceDetailBean.RealTimeParamsEntity bean : deviceDetailBean.getRealTimeParams()) { bean.setPName(deviceName + "-" + bean.getPName()); mRealTimeParamsList.add(bean); } String deviceName2 = deviceDetailBean2.getDeviceName(); for (DeviceDetailBean.RealTimeParamsEntity bean2 : deviceDetailBean2.getRealTimeParams()) { bean2.setPName(deviceName2 + "-" + bean2.getPName()); mRealTimeParamsList.add(bean2); } return mRealTimeParamsList; } }) .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<List<DeviceDetailBean.RealTimeParamsEntity>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { //处理错误异常 } @Override public void onNext(List<DeviceDetailBean.RealTimeParamsEntity> deviceDetailBean) { if (deviceDetailBean != null) { //处理数据显示adapter更新等; } else { TUtil.t("无数据"); } } }); }