Я новичок в мире rxjava и пытаюсь реализовать следующий сценарий.
В основном я хочу сделать вызов API, а затем сохранить информацию в базе данных, чтобы в следующий раз запуститьПриложение загружает данные из БД.Поэтому, чтобы достичь этого, я создал завершаемую для каждой вставки в базе данных, а затем, когда она заканчивает, уведомляет меня в пользовательском интерфейсе.Но дело в том, что оно никогда не заканчивается.
Мой вызов 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
Почему это происходит?Может кто-нибудь дать мне несколько советов или сказать, что я делаю не так?Это было бы очень полезно !!!