Не удается заставить метод повторить работу (Kotlin, Rx) - PullRequest
0 голосов
/ 05 ноября 2018

Я вызываю retryNextTweet.onNext() метод, но он не делает видимой повторной попытки. Моя цель - получить следующий предмет из локального хранилища. Если в sqlite нет записей, я заполню локальное хранилище с помощью apiService и повторю попытку.

private val retryNextTweet: PublishSubject<Any> = PublishSubject.create()

override fun getNextTweet(cacheId: Long, tweetSearchParams: TweetSearchParams): Observable<Tweet> {
    return tweetDao.getNextTweet(cacheId)
            .toObservable()
            .retryWhen {
                it.flatMap { loadTweetsFromApi(tweetSearchParams).subscribe({
                    if(it.isNotEmpty())
                        retryNextTweet.onNext(Any())
                }, {})
                    retryNextTweet }
            }
}

@Dao
interface TweetDao {
    @Query("SELECT * FROM tweet WHERE cacheId > :cacheId LIMIT 1")
    fun getNextTweet(cacheId: Long): Single<Tweet>
}

1 Ответ

0 голосов
/ 05 ноября 2018

Я просто заменил PublishSubject на BehaviorSubject, и это сработало. Спасибо akarnokd https://stackoverflow.com/users/61158/akarnokd

...