Android RxJava取消旧请求
我是Rxjava新手,在下面描述的场景中探索各种可能性并需要帮助 步骤1:滑动视图Android RxJava取消旧请求,android,rx-java,rx-android,Android,Rx Java,Rx Android,我是Rxjava新手,在下面描述的场景中探索各种可能性并需要帮助 步骤1:滑动视图 步骤2:进行API调用以获取数据 对于视图的数量,重复上述步骤 问题: API_调用_1获取视图_1结果 用户滑动视图2 API_调用_2获取视图_2结果 视图_1结果与视图_2结果一起返回并填充到视图_2中 当API调用2请求时,我需要取消API调用1请求。 谢谢。班级成员: Subscription mSubscription; 您的API调用: if(subscription != null &&
步骤2:进行API调用以获取数据 对于视图的数量,重复上述步骤 问题:
Subscription mSubscription;
您的API调用:
if(subscription != null && !subscription.isUnsubscribed()){
subscription.unsubscribe();
subscription = null;
}
subscription = doApiCall("some_id")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Object>() {
@Override
public void call(Object o) {
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
}
});
在开始新呼叫之前更好的方法是使用switchMap取消以前的请求您可以使用“switchMap”操作符提供“取消”逻辑。例如,您希望开始/停止加载(代码用Kotlin编写)
val loadingObservable=可观测的计时器(10,时间单位:秒)
val load=PublishSubject.create()
val resultObservable=load.switchMap{if(it)loadingObservable else Observable.never()}
说明:
每个RxJava网络请求您都有一个订阅,取消订阅请求下一个视图swiped@RajeshRajendiran,是否有任何方法可以自动取消订阅,如switchMap或任何类似的。switchMap、flatMap都是RxJava中的运算符(就像+、-、*…)基底可以观察到更多,谢谢Alexander。我按照你的建议退订了。我在刷卡时仍在接收旧数据。订阅时,subscription.isunsubscripted()始终为true!=null@VinayKG,请张贴您的密码。没有代码我很难帮助你。谢谢
if(subscription != null && !subscription.isUnsubscribed()){
subscription.unsubscribe();
subscription = null;
}
val loadingObservable = Observable.timer(10, TimeUnit.SECONDS)
val load = PublishSubject.create<Boolean>()
val resultObservable = load.switchMap { if(it) loadingObservable else Observable.never() }