使用Retrofit2和RxJava2组合请求

时间:2017-02-24 13:09:22

标签: android retrofit2 rx-java2

我正在尝试使用相同的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中逐个检查回复,并在检查完最后一个请求时使用onComplete执行Observer。有人可以帮我吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

听起来您正在寻找merge运营商。

答案 1 :(得分:1)

您正在寻找merge运营商:

  

您可以组合多个Observable的输出,以便它们起作用   像一个Observable一样,使用Merge运算符。

只需修改您的请求即可返回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);