结合请求与 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);