/**关键代码片段**/
//轮询服务器次数
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);
}
});
}