如何使用Rxjava2也许实现Repository Pattern

时间:2018-04-18 22:18:44

标签: android rx-java2

我正在尝试使用Rxjava2来实现存储库模式,我已经阅读了这篇文章RxJava 2 — Single.concat sample for Repository Pattern

似乎解决方法是创建一个Container类来帮助检查对象是否为null,这意味着更多的代码结构会发生变化。

它还建议使用Maybe,但没有任何示例。我试过

protected Maybe<Foo> loadDataFromCache() {
    return Maybe.just(cacheDataHelper.getFoo());
}

但是当没有缓存数据时,我仍然会收到NullPointerException

那么有人能给我一个如何使用Rxjava2的例子吗?或许可以实现Repository Pattern吗?

1 个答案:

答案 0 :(得分:0)

我终于找到了一个可能不是很优雅的答案,但它确实有效。 只需使用Maybe.empty()

示例代码为:

protected Maybe<Foo> getDataFromCache() {
    Foo foo = localDataHelper.getFoo();
    return foo != null ? Maybe.just(foo) : Maybe.empty();
}

public Single<Foo> loadDataFromMultipleRepos (int teamId) {
    Maybe<Foo> apiCallObservable = getDataFromCache().toMaybe();
    Maybe<Foo> cacheObservable = loadDataFromCache();

    return Maybe.concat(cacheObservable, apiCallObservable)
            .toSingle();
}

但我仍在寻找一种更优雅的rx方式来实现getDataFromCache()方法。感谢