我是Rxjava的新手并且在下面描述的场景中探索可能性并需要帮助。
第1步:滑动视图
第2步:进行API调用以获取数据
对于视图的数量重复上述步骤。
问题:
- API_CALL_1获取View_1结果
- 用户滑动View_2
- API_CALL_2获取View_2结果
- View_1结果将返回并在View_2中与View_2结果一起填充
醇>
我需要在API_CALL_2请求时取消API_CALL_1请求。 感谢。
答案 0 :(得分:1)
班级成员:
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) {
}
});
所以,它的主要思想是,你必须取消订阅以前的电话:
if(subscription != null && !subscription.isUnsubscribed()){
subscription.unsubscribe();
subscription = null;
}
开始新的通话之前
答案 1 :(得分:0)
更好的方法是使用switchMap取消先前的请求
答案 2 :(得分:0)
您可以使用'switchMap'运算符提供'取消'逻辑。例如,您想要开始/停止加载(用Kotlin编写的代码)。
val loadingObservable = Observable.timer(10, TimeUnit.SECONDS)
val load = PublishSubject.create<Boolean>()
val resultObservable = load.switchMap { if(it) loadingObservable else Observable.never() }
说明: