如何发出订阅的结果

问题描述 投票:1回答:1

我有以下情况。

  • 我使用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<Answer>.

非常感谢您的帮助!

kotlin android-room reactivex
1个回答
0
投票

如果有人遇到这种情况,解决办法是将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())
© www.soinside.com 2019 - 2024. All rights reserved.