RxJava2 - Завершаемо никогда не заканчивается - PullRequest
0 голосов
/ 10 октября 2018

Я новичок в мире 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

Почему это происходит?Может кто-нибудь дать мне несколько советов или сказать, что я делаю не так?Это было бы очень полезно !!!

1 Ответ

0 голосов
/ 10 октября 2018

Если вы используете Completable.create(), вам нужно вручную запустить onComplete()|onError() внутри блока, переданного в функцию.В вашем случае вы можете использовать Completable.fromCallable() или Completable.fromAction()

...