/**关键代码片段**/ //轮询服务器次数 private int checkTime = 0; private boolean orderPaySuccess = false; public void CheckPayStatue() { LogUtils.e("Rx定时器", "CheckPayStatue"); YiDianHttp.getService().checkOrderIsPay(mOrderNo).repeatWhen(new Function<Observable<Object>, ObservableSource<?>>() { @Override public ObservableSource<?> apply(Observable<Object> objectObservable) throws Exception { // 将原始 Observable 停止发送事件的标识(Complete() / Error())转换成1个 Object 类型数据传递给1个新被观察者(Observable) // 以此决定是否重新订阅 & 发送原来的 Observable,即轮询 // 此处有2种情况: // 1. 若返回1个Complete() / Error()事件,则不重新订阅 & 发送原来的 Observable,即轮询结束 // 2. 若返回其余事件,则重新订阅 & 发送原来的 Observable,即继续轮询 return objectObservable.flatMap(new Function<Object, ObservableSource<?>>() { @Override public ObservableSource<?> apply(@NonNull Object throwable) throws Exception { // 加入判断条件:当轮询次数 = 5次后,就停止轮询 if (checkTime > 3) { // 此处选择发送onError事件以结束轮询,因为可触发下游观察者的onError()方法回调 /**处理轮询结束的结果 1、结束时订单支付成功 2、结束时订单支付失败**/ if(!orderPaySuccess){ LogUtils.e("Rx定时器","轮询结束,订单支付失败"); } return Observable.error(new Throwable("轮询结束")); } // 若轮询次数<4次,则发送1Next事件以继续轮询 // 注:此处加入了delay操作符,作用 = 延迟一段时间发送(此处设置 = 1.5s),以实现轮询间间隔设置 return Observable.just(1).delay(1500, TimeUnit.MILLISECONDS); } }); } }).subscribeOn(Schedulers.io()) // 切换到IO线程进行网络请求 .observeOn(AndroidSchedulers.mainThread()) // 切换回到主线程 处理请求结果 .subscribe(new BaseObserver<BaseResponse>(_mActivity, mDisposable) { @Override protected void onSuccess(BaseResponse bean) { if(bean.getCode()==1001){ checkTime = 5; orderPaySuccess =true; LogUtils.e("Rx定时器", "轮询结果(已支付)"); ((PayDelegate) getParentFragment()).start(PayResultDelegate.newInstance(payType, mOrderNo, ((PayDelegate) getParentFragment()).mMoney, mPayFlag), SupportFragment.SINGLETASK); WeiboDialogUtils.closeDialog(mWeiboDialog); }else { LogUtils.e("Rx定时器", "轮询结果-订单未支付,当前轮询次数:"+checkTime); orderPaySuccess=false; checkTime++; } } @Override protected void onFailure(int code, String msg) { checkTime++; orderPaySuccess=false; LogUtils.e("Rx定时器", "查询订单失败--订单未支付,将继续轮询,当前轮询次数:"+checkTime); WeiboDialogUtils.closeDialog(mWeiboDialog); /**190116增**/ Hawk.delete(HawkConstant.OREDR); } }); }
使用Rxjava对订单支付结果进行轮询
最新推荐文章于 2022-08-21 13:43:49 发布