【问题标题】:RxJava 2, how do I place in my conditional here?RxJava 2,我如何在这里放置我的条件?
【发布时间】:2017-11-11 11:28:03
【问题描述】:

是否有可能替换这个条件:

if (_file.exists) {
  //rxjava post
}
else {
  //another type of post
}

以下帖子的通用版本:

service.setSolicitation("Berlin", getString(R.string.api_key))
.subscribeOn(Schedulers.io())
// Read results in Android Main Thread (UI)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::processError);

我真的不想重复自己,也不想使用 if 循环来避免空指针异常。有没有涉及 rx java 的花哨选项?

编辑

所以我的改造 API 接口上有两个 observables。

@POST("solicitation/create ")
Observable<Solicitation> createSolicitation(@Query("X-Authorization") String apiKey, @Body Solicitation solicitation);

@Multipart
@POST("solicitation/create")
Observable<Solicitation> uploadFileMap(
        @Query("X-Authorization") String apiKey,
        @PartMap() Map<String, RequestBody> partMap,
        @Part MultipartBody.Part file);

为什么我有两个 observables 用于同一事物?因为如果文件存在,我使用一个,如果文件不存在,我使用另一个。

因此我需要使用条件if (_file.exists) 进行检查。

我想简化这一切,而不必处理多个 if 语句..(已经有一个来检查我们是否在线,如果不在线则添加到队列中)。所以我在嵌套 ifs,这太可怕了。

【问题讨论】:

  • 我不清楚您要避免什么。条件似乎与您显示的示例 RxJava 调用无关。你能澄清一下吗?
  • 我会更新以使其更清晰,请稍等。
  • @ScottW 好了,这样更好还是希望我添加更多细节?
  • 谢谢,现在清楚多了。不幸的是,我不知道有什么奇特的解决方案,除了将逻辑抽象到一个单独的函数中,您可以从多个地方调用该函数。
  • 你不是在找Optional吗?

标签: android realm retrofit rx-java rx-java2


【解决方案1】:

使用实际的 if-else,但只针对不同的部分:

Observable.defer(() -> 
    someCondition() 
    ? service.setSolicitation("Berlin", getString(R.string.api_key))
    : service.createSolicitation(....)
) 
.subscribeOn(Schedulers.io())
// Read results in Android Main Thread (UI)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::processError);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2023-03-22
    • 2019-05-27
    相关资源
    最近更新 更多