Android RxJava 取消旧请求
Android RxJava Cancel the old request
我是 Rxjava 的新手,正在探索下面描述的场景的可能性并需要帮助。
第 1 步:滑动视图
第 2 步:进行 API 调用以获取数据
查看次数重复上述步骤。
问题:
- API_CALL_1 fetching the View_1 Results
- User swipes a View_2
- API_CALL_2 fetching the View_2 Results
- View_1 results are returned and populated in View_2 along with View_2 results
我需要在API_CALL_2请求时取消API_CALL_1请求。
谢谢
Class 会员:
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;
}
开始新通话之前
更好的方法是使用 switchMap 取消之前的请求
您可以使用 'switchMap' 运算符提供 'cancel' 逻辑。例如,你想 start/stop loading (Code written in Kotlin).
val loadingObservable = Observable.timer(10, TimeUnit.SECONDS)
val load = PublishSubject.create<Boolean>()
val resultObservable = load.switchMap { if(it) loadingObservable else Observable.never() }
说明:
- 'loadingObservable'是一个模拟长运行操作的定时器
- 'load' 是用户发出的开始或停止加载的命令。如果你想
开始加载 - 发送 True else False
- 'switchMap' 运算符是
旨在处理以前的可观察对象。所以你发送 True 它会
开始加载。如果你发送 False 它将处理(取消)之前的
可观察到。
我是 Rxjava 的新手,正在探索下面描述的场景的可能性并需要帮助。
第 1 步:滑动视图
第 2 步:进行 API 调用以获取数据
查看次数重复上述步骤。
问题:
- API_CALL_1 fetching the View_1 Results
- User swipes a View_2
- API_CALL_2 fetching the View_2 Results
- View_1 results are returned and populated in View_2 along with View_2 results
我需要在API_CALL_2请求时取消API_CALL_1请求。 谢谢
Class 会员:
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;
}
开始新通话之前
更好的方法是使用 switchMap 取消之前的请求
您可以使用 'switchMap' 运算符提供 'cancel' 逻辑。例如,你想 start/stop loading (Code written in Kotlin).
val loadingObservable = Observable.timer(10, TimeUnit.SECONDS)
val load = PublishSubject.create<Boolean>()
val resultObservable = load.switchMap { if(it) loadingObservable else Observable.never() }
说明:
- 'loadingObservable'是一个模拟长运行操作的定时器
- 'load' 是用户发出的开始或停止加载的命令。如果你想 开始加载 - 发送 True else False
- 'switchMap' 运算符是 旨在处理以前的可观察对象。所以你发送 True 它会 开始加载。如果你发送 False 它将处理(取消)之前的 可观察到。