Wut*_*ada 0 android rx-java rx-android retrofit2 rx-java2
我想在用户点击按钮时调用请求.但是当第一次请求没有响应时,用户想要更改参数并使用相同的URL调用新请求.
问题 如何取消第一个请求并使用相同的URL调用新请求.
ServiceFactory
.createService()
.getSomething(page)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DefaultObserver<SomthingResponse>() {
@Override
public void onNext(@NonNull SomthingResponse response) {
showSomthing()
hideProgressDialog();
}
@Override
public void onError(@NonNull Throwable e) {
hideProgressDialog();
showErrorMessage(e.getMessage());
}
@Override
public void onComplete() {
}
});
Run Code Online (Sandbox Code Playgroud)
当用户点击按钮时,用户会将页面参数发送到查询字符串,但此请求尚未完成.用户将更改为页面参数并发送新请求.我想取消第一个请求.
谢谢
switchMap()运营商回答你的问题:
public static class User {} // Dummy server response
public Observable<Object> getButtonClicks() {
return RxView.clicks(findViewById(R.id.button)); // (1)
}
public Single<User> getUserFromApi() {
return Single.just(new User()) // (2)
.delay(5, TimeUnit.SECONDS);
}
public void fun() {
getButtonClicks()
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.io())
.switchMap(__ -> getUserFromApi().toObservable()) // (3)
.observeOn(AndroidSchedulers.mainThread()) // (4)
.subscribeWith(new DisposableObserver<User>() {
@Override public void onNext(@NonNull User user) {
Log.d("fun", "onNext");
}
@Override public void onError(@NonNull Throwable e) {
Log.d("fun", "onError");
}
@Override public void onComplete() {
Log.d("fun", "onComplete");
}
});
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么:
Object每次点击按钮.
MainThread.| 归档时间: |
|
| 查看次数: |
403 次 |
| 最近记录: |