我调用了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>
}
答案 0 :(得分:0)
我只是用BehaviorSubject替换了PublishSubject,并且它起作用了。谢谢akarnokd https://stackoverflow.com/users/61158/akarnokd