gpt4 book ai didi

java - RxJava在数据库为空时调用网络

转载 作者:行者123 更新时间:2023-12-02 11:07:29 24 4
gpt4 key购买 nike

我正在使用 RxJava、Room 和 Retrofit 来完成 Android 中的存储库模式。除了这一件事之外,一切都正常。我已经实现了 SearchView 来搜索数据。现在,当搜索 View 文本更改时,我调用搜索方法。这是它的样子

mLocal.searchMovies(query) //returns Single
mRemote.searchMovies(query) //returns Single

public Single<List<MovieEntity>> search(String query) {
return mLocal.searchMovies(query)
.toMaybe()
.switchIfEmpty(mRemote.searchMovies(query)
.map(data -> {
mLocal.saveAll(data);
return data;
}));
}

mLocal 查询房间数据库,mRemote 调用 Retrofit 从 REST API 获取数据。问题是,这只调用 mLocal,当 room 返回空行时,不会发起网络调用。我已经尝试了所有可能的方法并阅读了很多文章,但我不明白如何让它工作。

mLocal 和 mRemote 都工作正常。仅链接它们并不能实现我想要的。

最佳答案

您的链条无法工作,因为 .toMaybe()来自Single无法生产Maybe.empty() ,这是 .switchIfEmpty 所需的结果生效。

您需要将其替换为 Single.onErrorResume因此,缺少条目的错误条件会导致远程查询,或者使其返回 Maybe准确地表示 <Result,NotCached,Error> 的三态.

关于java - RxJava在数据库为空时调用网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50859894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com