android - RxJava2- 可完成永无止境
问题描述
我是 rxjava 世界的新手,并试图实现以下场景。
基本上我想进行 api 调用,然后将信息保存在数据库中,以便下次启动应用程序时,它会从数据库加载数据。因此,为了实现这一点,我为数据库中的每个插入创建了一个可完成的内容,然后每当它完成时,它都会在 UI 中通知我。但问题是它永远不会结束。
我的 API 调用:
fun getConversation(): Single<ConversationResponse>
它返回用户列表和消息列表
我在数据库中的插入:
fun insertUsers(users: List<User>) = Completable
.create { usersDao.addUsers(users) }
fun insertMessages(messages: List<Message>) = Completable
.create { messagesDao.addMessages(messages) }
然后我进行 api 调用并插入数据
fun getMessagesFromApi(): Completable {
return conversationService.getConversation()
.flatMapCompletable {
conversationCache.insertUsers(it.users)
.doOnComplete { Log.d("ConversationActivity", "Insert users") }
.andThen(conversationCache.insertMessages(it.messages)
.doOnComplete { Log.d("ConversationActivity", "Insert messages") })
}
然后在我的活动中
conversationRepository.getMessagesFromApi()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : DisposableCompletableObserver() {
override fun onStart() {
Log.d("ConversationActivity", "onStart")
}
override fun onComplete() {
Log.d("ConversationActivity", "onComplete")
mvpView?.loadedInfo()
}
override fun onError(e: Throwable) {
Log.d("ConversationActivity", "onError: $e.message")
}
})
在我的日志中我只看到D/ConversationActivity: onStart
为什么会这样?有人可以给我一些提示或告诉我我做错了什么吗?会很有帮助的!!!
解决方案
如果使用,则需要在传递给函数的块内Completable.create()
手动触发。onComplete()|onError()
在您的情况下,您可以使用Completable.fromCallable()
或Completable.fromAction()
推荐阅读
- javascript - 在网格中查找下一个有效单元格
- python - 为什么这个 python 代码似乎用相同的数字序列填充所有列表条目?
- html - 我在 AWS S3 上托管了简单的 HTML CSS 页面作为网站,但在实时网页上,文本“-”中的任何地方都显示为“â^”字符。我
- json - 如何通过在flutter中从json文件中获取来通过url播放视频
- sql - 如何在 Postgres 的 xml 列中索引元素的名称
- php - ParameterNotFound:缺少对在 DoctrineMongoDBBundle 中使用 staticphp 作为映射类型的依赖
- excel - 用特定值填充空白单元格超过 100,000 行
- julia - 如何从 Julia 的字典中获取空条目?
- python - vs代码的乌龟问题
- python - 使用 scrapy 概念抓取电子商务网站