2016-04-23 57 views
1

因此,我是一位試圖學習RxJava/RxAndroid的新手Android程序員。將一個標準Android代碼重構爲Reactive代碼

我正在開發的應用程序有一個本地數據庫(使用櫥櫃),由API支持。它有兩個屏幕:一個顯示項目列表和其他項目細節。每當我需要顯示的項目我把這個方法從我的本地數據庫加載它們和:

public void getItems() { 
    List<Item> Items = cupboard().withDatabase(database).query(Item.class).list(); 

    if (Items == null || Items.isEmpty()) { 
     service.listItems().enqueue(new Callback<Items>() { 
      @Override 
      public void onResponse(Call<Items> call, Response<Items> response) { 
       if (response.isSuccessful()) { 
        cupboard().withDatabase(database).put(response.body().getItems()); 
        mDataReceiver.onItemsLoaded(response.body().getItems()); 
       } else { 
        Log.d(ItemsLoader.class.getSimpleName(), response.message()); 
       } 
      } 

      @Override 
      public void onFailure(Call<Items> call, Throwable t) { 
       Log.d(ItemsLoader.class.getSimpleName(), t.getMessage()); 
      } 
     }); 
    } else { 
     mDataReceiver.onItemsLoaded(Items); 
    } 
} 

如果不返回任何(空列表或null),我從API加載它們,將其保存在我的地方數據庫並將其返回給用戶。

我試圖通過使用API​​調用將數據庫調用鏈接到響應(使用RxJava,RxAndroid和RxCupboard),在需要時使用flatMap來重構此代碼,但是我無法使其工作,也無法繞過我的頭它。

是否有可能將此代碼重構爲Reactive或者我應該離開這種方式?如果可能的話,什麼是正確的方法來做到這一點?

回答

1

這可以通過PublishSubject來解決。當調用onResponse()onFailure()時,您可以在此對象上發佈數據(和錯誤!)。 PublishSubject也是Observable,所以你可以訂閱它的數據。

請參閱docs