2016-11-25 26 views
1

使用以下代碼。我預計:RealmRecylerAdapter與RxJava

1.從服務器端獲取所有數據。

2.將所有數據境界

3.刷新RecycleView與領域適配器。

第一次,數據總是空的。也許數據還沒有準備好,但訂閱仍然被調用?數據準備好後有沒有辦法更新視圖?

ApiCall().doOnNext(response -> { 
    Realm realm = Realm.getDefaultInstance(); 
    try { 
     realm.beginTransaction(); 
     realm.insertOrUpdate(response); 
     realm.commitTransaction(); 
    } finally { 
     realm.close(); 
} 
}).subscribeOn(Schedulers.io()) 
    .unsubscribeOn(Schedulers.computation()) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(new exObserver<List<T>>() { 
     @Override 
     public void onResponse(List<T> response) { 
      updateView() 
     } 
     @Override 
     public void onFailure(exException exception) { 
      adapter.notifyChanged(); 
     } 
}); 

回答

1

正如EpicPandaForce所提到的,當有變化時,您不需要通知RealmRecyclerViewAdapter

我的答案將專門針對您使用RxJava。

doOnNext()是一種副作用方法。 這意味着它將與您的流並行調用,而不會影響它。

當您的api調用返回時,Action1,doOnNext()和都將同時觸發。

這意味着updateView()在Realm事務完成之前被調用。

如果您想在插入數據庫後更新視圖,則您的交易必須發生在您的數據流中。

您可以使用flatMap()來達到此目的。

+0

完美的答案。謝謝。 –

0

你的apiCall()方法是什麼?如果您沒有使用Retrofit,請嘗試使用Observable.defer(() - > apicall())。這會延遲代碼評估,直到實際值到達。

+0

我正在使用Retrofit。 –