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

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调用改造以从REST API中获取数据。问题是,这仅调用mLocal,并且当房间返回空行时不会启动网络调用。我已经尝试了所有可能的东西,并阅读了许多文章,但是我不明白如何使它工作。

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

最佳答案

您的链条不起作用,因为.toMaybe()中的Single无法产生Maybe.empty(),这是使.switchIfEmpty生效所需的结果。

您可能需要用Single.onErrorResume替换它,以便缺少条目的错误情况导致远程查询,或者使其返回Maybe以准确表示<Result,NotCached,Error>的三态。

07-26 07:44