【问题标题】:How can I map Observable to Single in RxAndroid?如何在 RxAndroid 中将 Observable 映射到 Single?
【发布时间】:2020-09-24 17:37:45
【问题描述】:

我有Observable<State> state 还有这段代码`

Flowable<.> loadData(){
return state.toFlowable(Latest).flatmap(this::fetchData()) }`

在哪里fetchData() 返回Flowable

但是如果我们有 fetchData()Single 返回类型怎么办 并且 loadData() 返回 Single<.>

如何将 Observable 映射到 Single?

【问题讨论】:

    标签: android rx-java2 rx-android


    【解决方案1】:

    您可以使用.take(1) 获取第一项并使用以下方法转换为单项:

    • .single(defaultItem)
    • .singleElement()
    • .singleOrError()

    【讨论】:

      【解决方案2】:

      这是一个可行的解决方案:

       loadDataSingle()
                  .subscribeBy(
                          onSuccess = { println("This is your single data $it") },
                          onError = { println("We have a problem") }
                  )
      
      
      fun loadDataSingle(): Single<String> {
          return getState().singleOrError()
                  .flatMap {
                      fetchDataSingle()
                  }
      }
      
      fun fetchDataSingle(): Single<String> {
          return Single.just("This is fetching your single data")
      }
      

      或者你可以这样做 Single.fromObservable 并将调用包装在其中

         fun loadDataSingle(): Single<String> {
          return Single.fromObservable(getState())
                  .flatMap { fetchDataSingle() }
      
         }
      
              
      

      【讨论】:

      • 如果getState()发出多个元素,则会发出异常信号。
      • @lbasek 这就是我们处理onError 以防万一的原因。您对此有其他解决方案吗?
      • 我认为这只是实施的问题。您可以只取第一个元素 (.take(1)) 并在此处避免异常。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多