【问题标题】:How to emit the result of a subscription如何发出订阅的结果
【发布时间】:2020-05-29 23:19:16
【问题描述】:

我有以下情况:

  • 我正在使用 RxKotlin 扩展来检测我的活动按钮中的点击
  • 我正在使用 Room 在数据库中插入记录

这是我活动中相关的代码:

button.clicks()
            .flatMap {
                val list = mutableListOf<Answer>()
                val date = Date()
                list.add(Answer("some placeholder info")) 
                list.add(Answer("Another placeholder info")) 
                Observable.fromArray(list)
            }
            .map {
                upsertStatusQuestionsViewModel.insertMultipleAnswers(it)
            }.subscribe {
                // it here is an object Maybe<Answer>
            }

这是 ViewModel 的代码:

fun insertMultipleAnswers(answers: List<Answer>) = database.answerDao()
                                                      .createMultiple(answers.toList())
                                                      .subscribeOn(Schedulers.io())
                                                      .observeOn(AndroidSchedulers.mainThread())

我想显示一些关于插入到数据库中的答案的信息,因此,我需要在我的订阅中获取 Answer 对象。但是,我不知道我可以使用哪个运算符来实现订阅中的 it 对象属于 Answer 类,而不是 Maybe&lt;Answer&gt;

非常感谢您的帮助!

【问题讨论】:

    标签: kotlin android-room reactivex


    【解决方案1】:

    如果有人遇到这个问题,解决方案是将 Maybe 解析为 Observable,因为 Observable 实现了 ObservableSource,所以我的代码现在是这样的:

    upsert_status_questions_confirm.clicks()
                .map {
                    val list = mutableListOf<Answer>()
                    list.add(Answer("Some placeholder"))
                    list.add(Answer("Another placeholder"))
                    list
                }.flatMap {
                    upsertStatusQuestionsViewModel.insertMultipleAnswers(*it.toTypedArray())
                }.subscribe({
                    // Success...
                }, {
                    // Error...
                })
    

    在 ViewModel 中:

    fun insertMultipleAnswers(vararg answers: Answer) = database.answerDao()
                                                   .createMultiple(answers.toList())
                                                   .toObservable()
                                                   .subscribeOn(Schedulers.io())
                                                   .observeOn(AndroidSchedulers.mainThread())
    

    【讨论】:

      猜你喜欢
      • 2020-02-22
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多