使用来自其他 Observable 的数据将 Callback 转换为 Observable

Transform Callback into Observable with data from other Observable

提问人:Alfredo Bejarano 提问时间:6/14/2023 更新时间:6/14/2023 访问量:28

问:

我是 RxJava 的新手,我有一个关于将回调转换为可观察对象的问题。

我有这个使用回调的函数。

client.loadAsync(body, object : Callback {
   override fun onSuccess(response: AwesomeResponse) {
      // Successful response!
   }
   
   override fun onError(exception: Exception) {
      // Error response!
   }
})

为此,我使用Single.create

Single.create {
   client.loadAsync(body, object : Callback {
      override fun onSuccess(response: AwesomeResponse) {
         it.onSuccess(response)
      }
   
      override fun onError(exception: Exception) {
         it.onError(exception)
      }
   })
}

问题来自参数,要构建它,我需要来自另一个可观察对象的数据。body

这就是我现在正在做的事情。

otherObservable.doOnNext { dto -> 
   val body = clientBody(id = dto.Id)

   Single.create {
      client.loadAsync(body, object : Callback {
         override fun onSuccess(response: AwesomeResponse) {
            it.onSuccess(response)
         }

         override fun onError(exception: Exception) {
            it.onError(exception)
         }
      })
   }
   .subscribeOn(scheduler)
   .subscribe(
      { uiReportSubject.onNext(it) }, 
      {}, 
      compositeDisposable
   )
}
.subscribeOn(scheduler)
.subscribe()

我通过订阅对象将数据接收到我的 UI 中,该对象是一个uiReportSubjectBehaviourSubject

我的问题是,这是正确的方法吗?或者有更好的方法可以做到这一点吗?像运算符(喜欢)或类似的东西?map

谢谢

Android Kotlin 回调 rx-java rx-android

评论

0赞 akarnokd 6/14/2023
用。otherObservable.flatMap(dto -> ... return Single.create(...))
0赞 Alfredo Bejarano 6/14/2023
它不会让我。IDE 报告以下情况:Type mismatch: Required: ObservableSource<out Item> Found: Single<Item> 我使用 RxJava3。RxJava 版本相关吗?
0赞 Alfredo Bejarano 6/14/2023
我将 Single.create 更改为 Observable.create,它现在接受返回类型。我会测试一下
0赞 akarnokd 6/14/2023
然后它的.flatMapSingle

答: 暂无答案