觀察在不同的線程我需要:領域,網絡運營,訂閱與RxJava
- 從API獲取在後臺線程的一些數據
- 顯示屏上的UI
保存數據到領域。
fetchItemsFromServer().subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<ItemList>() { @Override public void call(ItemList items) { displayItems(items); try { realm.beginTransaction(); realm.copyToRealmOrUpdate(itemList); realm.commitTransaction(); Logger.v("Realm ", "Copied list object to realm"); } catch (Exception e) { Logger.e("Realm Something went wrong ", e); realm.cancelTransaction(); } } }
這引發錯誤:境界不正確的螺紋
訪問我有4個標籤在同一時間取不同的消息。
fetchItemsFromServer()是一個密集型調用,並將此調用限制在一個線程中並不好。我需要這種靈活性。
有沒有人發現使用領域這種方式的任何解決方法?
大多數例子如往往集中在與境界獲取VS與網絡運營工作:
舉例如下:
Rxjava - https://realm.io/news/realm-java-0.87.0/
使用領域與RxJava - https://realm.io/news/using-realm-with-rxjava/(以前的解決方案,但性能缺點)
我的領域由數據庫模塊通過依賴注入提供(Dagger 2)
@Module
public class DatabaseModule {
public static final String REALM_FILE_NAME = "Realm name";
@Provides
Realm providesRealmInstance(Context context) {
return Realm.getInstance(
new RealmConfiguration.Builder(context)
.name(REALM_FILE_NAME)
.build());
}
}
你從哪兒在用戶讓你的領域實例?訂閱者正在UI線程上進行保存,所以如果你的Realm實例也在那裏創建,它應該可以工作。 –
@ChristianMelchior我的境界是通過依賴注入注入的。一旦我刪除了API調用的subscribeOn(Schedulers.io()),一切正常。 – AndroidEnthusiast
刪除'subscribeOn(Schedulers.io())'應該不會影響您的訂閱者,因爲您在主線程中觀察。你的'fetchItemsFromServer()'以某種方式使用Realm? –