结合请求与 Retrofit2 和 RxJava2
Combine requests with Retrofit2 and RxJava2
我正在尝试观察具有相同 Observer
的两个请求。我的 Observer
:
private BaseObserver<LoginResponse> loginObserver = new BaseObserver<LoginResponse>(this) {
@Override
public void onSubscribe(Disposable d) {
super.onSubscribe(d);
showLoading(true);
Log.d(TAG, "onSubscribe: ");
}
@Override
public void onNext(LoginResponse response) {
super.onNext(response);
Log.d(TAG, "onNext: ");
}
@Override
public void onComplete() {
super.onComplete();
showLoading(false);
Log.d(TAG, "onComplete: ");
}
@Override
public void onError(Throwable e) {
super.onError(e);
showLoading(false);
}
};
我的请求是使用 Retrofit2 构建的登录请求:
private void sendRequest(String username, String password) {
IResourceAPI iResourceAPI = RetrofitClient.createIResourceClient(this);
iResourceAPI.login(new LoginRequest(username, password))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(loginObserver);
}
现在我想发起 2 个或更多请求并在 onNext
中一个一个地检查响应,当最后一个请求被检查时用我的 Observer
执行 onComplete
。谁能帮帮我吗?
提前致谢。
听起来您正在寻找 merge 运算符。
您正在查找 merge 运算符:
You can combine the output of multiple Observables so that they act
like a single Observable, by using the Merge operator.
只需将您的请求修改为 return 一个 Observable:
private Observable<LoginResponse> request(String username, String password) {
IResourceAPI iResourceAPI = RetrofitClient.createIResourceClient(this);
iResourceAPI.login(new LoginRequest(username, password))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
然后合并:
Observable.merge<LoginResponse>(request(...), request(...))
.subscribeWith(loginObserver);
我正在尝试观察具有相同 Observer
的两个请求。我的 Observer
:
private BaseObserver<LoginResponse> loginObserver = new BaseObserver<LoginResponse>(this) {
@Override
public void onSubscribe(Disposable d) {
super.onSubscribe(d);
showLoading(true);
Log.d(TAG, "onSubscribe: ");
}
@Override
public void onNext(LoginResponse response) {
super.onNext(response);
Log.d(TAG, "onNext: ");
}
@Override
public void onComplete() {
super.onComplete();
showLoading(false);
Log.d(TAG, "onComplete: ");
}
@Override
public void onError(Throwable e) {
super.onError(e);
showLoading(false);
}
};
我的请求是使用 Retrofit2 构建的登录请求:
private void sendRequest(String username, String password) {
IResourceAPI iResourceAPI = RetrofitClient.createIResourceClient(this);
iResourceAPI.login(new LoginRequest(username, password))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(loginObserver);
}
现在我想发起 2 个或更多请求并在 onNext
中一个一个地检查响应,当最后一个请求被检查时用我的 Observer
执行 onComplete
。谁能帮帮我吗?
提前致谢。
听起来您正在寻找 merge 运算符。
您正在查找 merge 运算符:
You can combine the output of multiple Observables so that they act like a single Observable, by using the Merge operator.
只需将您的请求修改为 return 一个 Observable:
private Observable<LoginResponse> request(String username, String password) {
IResourceAPI iResourceAPI = RetrofitClient.createIResourceClient(this);
iResourceAPI.login(new LoginRequest(username, password))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
然后合并:
Observable.merge<LoginResponse>(request(...), request(...))
.subscribeWith(loginObserver);