する必要がある :
- バックグラウンド スレッドで 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() は集中的な呼び出しであり、この呼び出しを 1 つのスレッドに限定するのは適切ではありません。この柔軟性が必要です。
このようにレルムを使用して回避策を見つけた人はいますか?
たとえば、ほとんどの例は、レルムからのフェッチとネットワーク操作の操作に焦点を当てている傾向があります。
以下の例:
Rxjava - https://realm.io/news/realm-java-0.87.0/
RxJava でのレルムの使用 - https://realm.io/news/using-realm-with-rxjava/ (以前のソリューションですが、パフォーマンスの欠点)
My Realm は、依存性注入 (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());
}
}