小编Krz*_*ski的帖子

带RxJava2的房间 - (Flowable,Maybe,Repository Pattern)

我在我的应用程序中使用Room作为数据库层,并在网络调用中使用Retrofit - 无论是在房间还是改造中我都在使用RxJava2(这是我的第一个使用rxjava的项目,所以我在这方面仍然相当新手).要注入数据库,api等我正在使用Dagger 2.

我想进行网络呼叫并将响应从网络添加到数据库.当不需要再进行网络调用时 - 我想从数据库中获取数据.我在我的房间存储库中使用Maybe/Flowable时遇到问题.

这是道:

@Dao
public interface CoinDao {
    @Query("SELECT * FROM coin")
    Flowable<List<Coin>> getAllCoins();

    @Insert
    void insert(List<Coin> coins);

    @Update
    void update(Coin... coins);

    @Delete
    void delete(Coin... coins);
}
Run Code Online (Sandbox Code Playgroud)

这是我的存储库:

public class CoinRepository implements Repository {

private CoinMarketCapNetworkApi api;

private final CoinDao coinDao;


public CoinRepository(CoinMarketCapNetworkApi api, CoinDao coinDao) {
    System.out.println("Creating CoinRepository");
    this.api = api;
    this.coinDao = coinDao;
}

@Override
public Flowable<List<Coin>> getCoinResults() {
    System.out.println("getting coin results");
    return getCoinResultsFromDatabase().switchIfEmpty(getCoinResultsFromNetwork())
}


@Override
public Flowable<List<Coin>> getCoinResultsFromNetwork() {
    System.out.println("getting results from …
Run Code Online (Sandbox Code Playgroud)

android rx-java retrofit2 rx-java2 android-room

9
推荐指数
1
解决办法
4173
查看次数

Rxjava-如何检查Maybe / Observable是否正确为空?

我正在使用Maybe访问数据库,我的目标是如果Maybe将完成指示数据库中没有数据(我正在使用会议室),则要致电网络。我有以下功能:

@Override
public Observable<List<Item>> getResults() {
    return getResultsFromDatabase().toObservable().switchIfEmpty(getResultsFromNetwork());
}

@Override
public Observable<List<Item>> getResultsFromNetwork() {
    System.out.println("getting results from network");
    return api.getData().doOnNext(new Consumer<List<Item>>() {
        @Override
        public void accept(List<Item> items) throws Exception {
            itemDao.insert(items);
        }
    });
}

@Override
public Maybe<List<Item>> getResultsFromDatabase() {
    System.out.println("getting coins from database");
    return itemDao.getAllItems();
}
Run Code Online (Sandbox Code Playgroud)

但是,即使数据库中存在对象,switchIfEmpty也会总是被意外地工作,因为它总是被调用。

return getResultsFromDatabase().toObservable().switchIfEmpty(getResultsFromNetwork());
Run Code Online (Sandbox Code Playgroud)
  1. 是否可以仅使用toObservable()将Maybe转换为Observable?
  2. 还有另一种方法可以检查Maybe是否为空然后对其采取行动?

android rx-java rx-java2 android-room

2
推荐指数
1
解决办法
4978
查看次数

标签 统计

android ×2

android-room ×2

rx-java ×2

rx-java2 ×2

retrofit2 ×1