【问题标题】:Convert Single<Boolean> to Boolean (Kotlin)将 Single<Boolean> 转换为布尔值 (Kotlin)
【发布时间】:2019-04-05 11:48:32
【问题描述】:

我有一个可变的实时数据,用于调整布局中的可见性(使用绑定适配器)。我使用实时数据的布尔值通过下面的代码来实现这一点。

@BindingAdapter("viewVisibility")
fun setVisibility(view: View, visible: Boolean) {
    view.visibility = if (visible) View.VISIBLE else View.GONE
}

要获取此数据,我使用以下方法

   Flowable.just(
Sdk().searchContact(CHATBOT_NAME)).map {!(it.isEmpty()) }

it.isEmpty() 给了我一个 Flowable > 而不是 Flowable,我想将此 Single 转换为布尔值(将其作为参数提供给我的绑定适配器)但我找不到方法转换它。我的临时(可能是坏的)解决方案如下。

  it.blockingLast().isEmpty() // Blocking last gives me a list so I can get non-single boolean with isEmpty. Since I need one element from search contact method blocking last or first works same in this case.

这是一个可接受的解决方案吗?如何将 Single 转换为普通布尔值?

【问题讨论】:

  • ` 给了我一个 Flowable> 而不是 Flowable` - 你是什么意思?
  • 似乎 stackoverFlow 删除了 "

标签: android mvvm kotlin rx-java rx-java2


【解决方案1】:

又是我,试试下面的代码:

fun doesExist(): Flowable<Boolean> {
   return Flowable.just(Single.just(Sdk().searchContact(CHATBOT_NAME)).map{ it.isEmpty()}).map {it.blockingGet() }
}

【讨论】:

  • 我要在一个小时内试试这个。顺便问一下,Flowable.just 之后附加 Single.just 的目的是什么?我认为没有必要,因为方法仍然返回 Single 没有它。 single.just 和 flowable.just 有不同的行为吗?
  • 因为你想要 Single 在最后一个问题之前,如果你不需要,那么删除 Single.just 代码将是 Flowable.just(ArrayList()).map{ it.isEmpty()}
  • 已接受。旁注:似乎使用阻塞获取与 Androidscheduler 会导致问题。 stackoverflow.com/questions/46614494/…
  • 是的,如果您的操作很耗时,那么您不应该在主线程中执行此操作,您可以使用 Schedulers.io() 代替 Androidschedulers.main
猜你喜欢
  • 2019-06-11
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 2012-02-25
  • 2015-02-20
  • 1970-01-01
相关资源
最近更新 更多