当前位置: 首页 > 知识库问答 >
问题:

将请求与 Retrofit2 和 RxJava2 相结合

公西星海
2023-03-14

我试图用相同的观察者观察两个请求。我的观察者

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);
    }
};

我的请求是使用Reformation 2构建的登录请求:

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中逐个检查响应,当检查最后一个请求时,使用我的观察者执行on完整。有人能帮我吗?

提前致谢。

共有2个答案

蔺德曜
2023-03-14

听起来你好像在找合并运算符。

邰胤
2023-03-14

您正在寻找合并运算符:

通过使用Merge操作符,可以将多个可观察对象的输出组合起来,使它们像单个可观察对象一样工作。

只需修改您的请求,返回一个可观察值:

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);
 类似资料:
  • 可观察的如下所示。

  • 我使用Reformation2和RxJava2从服务器获取数据。我有以下格式的回复: 我得到以下异常: ApiService.class RetrofitClient.class 现在我正在使用如下的一些东西来获取数据: 有人请让我知道为什么我得到这个exception.Any帮助将不胜感激。 谢谢

  • 嗨,我有Flux,在迭代每个元素时,它会创建新的单声道。我也有其他单声道之外的通量。并要做到以下几点:当流量(与相应的内部单声道的结束),然后做第二个单声道。最大的挑战是单声道内部的流量从网络客户端请求中产生。作为起点,请看看“加载”方法。基本上没有webClient它的工作,但在情况下与webClient内部地图工作之后。使用Spring启动2 渐变依赖性:

  • 问题内容: 我正在使用Retrofit集成我的Web服务,但我不明白如何使用POST请求将JSON对象发送到服务器。我目前陷入困境,这是我的代码: 活动:- PostInterface:- 要求JSON:- 响应JSON:- 问题答案: 在gradle中使用这些 使用这两个POJO类........ LoginData.class LoginResult.class 像这样使用API 使用这样的呼

  • 我正在学习使用RxAndroid库的RxJava,同时使用改型来进行联网,并使用RetroLambda来使用Java8 lambdas。 我希望构建的应用程序具有以下功能: 允许用户键入对Wikipedia API的查询 我让它像这样工作: 现在,我想添加一个新的小部件,允许我的维基百科查询使用另一种语言。现在,我将选择一个开关,以“en”或“nl”作为维基百科url的前缀。 所以我从开关中创建了

  • 我依赖于retrofit2,该retrofit2配置为使用RxJava包装响应,并使用GSon解析它们。 我在用Reterfit做Rest服务。 search REST服务返回一个JSON null 它为我的接口生成服务,并使用解析响应,并用包装它。 然后我获得服务: 请注意,我不编写这个服务的代码,因为retrofit工作时,它使用我的接口()注释自动生成服务。 如果用户使用执行搜索调用,则不会