首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RxJava2单机根据项目选择不同的路线

RxJava2单机根据项目选择不同的路线
EN

Stack Overflow用户
提问于 2017-12-07 07:12:48
回答 1查看 32关注 0票数 0

我有以下代码:

代码语言:javascript
运行
复制
Single<Response<User>> single = service.registerUser();

single
     .subscribeOn(Schedulers.io())
     .observeOn(Schedulers.computation())
     .map(Response::body)
     .flatMap(parentsRepsitory::writeUser)
     .observeOn(AndroidSchedulers.mainThread())
     .flatMap(parentsRepsitory::getUser)

其中parentsRepository是一个回购包装我的领域数据库。但是,当服务器返回验证错误时,就会出现问题。所以在我的溪流的某个地方,我想要一个相当于

代码语言:javascript
运行
复制
if(response.code() == 201){
    // CONTINUE STREAM USING THE LOGIC THAT HANDLES SUCCESS
}elseif(response.code() == 400){
    // CONTINUE STREAM USING LOGIC TO HANDLE THE VALIDATION ERRORS
}

我以前实现的解决方案如下:

代码语言:javascript
运行
复制
Observable<Response<User>> observable_from_api =
        service.attemptLogin(username, password)
               .share();

observable_from_api
        .filter(response -> response.code() == HttpStatus.HTTP_STATUS_200_OK)
        .//handle logic for success

observable_from_api
        .filter(response -> response.code() == HttpStatus.HTTP_STATUS_400_BAD_REQUEST)
        .//handle logic for validation errors

我不喜欢这个解决方案有几个不同的原因。最主要的是,这似乎是不对的。第二个问题是,.share()方法只能在可观察的对象上可用。由于我的网络操作只发出一个响应,所以我更愿意使用单个响应,但是.share()方法在那里不可用。

对不起,如果这是一个重复的问题,我已经做了一些调查,只是找到了我刚才提到的解决办法。我想要么看到最优解,要么被明确地告知,这实际上是最优解。

EN

回答 1

Stack Overflow用户

发布于 2017-12-07 09:08:42

我认为你需要定义你想让你的消费者接收哪种数据。我假设您希望在使用者中接收一个User对象。

这些是您应该创建的方法的签名:

代码语言:javascript
运行
复制
Single<User> handleSuccess(Response<User> response)

Single<User> handleError(Response<User> response)

然后以这样的方式创建流:

代码语言:javascript
运行
复制
service.registerUser()
    .flatMap(response -> {
         if (response.success) {
             return handleSuccess(response);
          } else {
             return handleError(response);
          }
     })
.subscribe(user -> logd("user: " + user.name));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47689526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档