レルム参照の代わりにレルムオブジェクトのコピーをストリーミングし、Schedulers.IOスレッドで観察すると、有名な例外メッセージ "Realm access from incorrect thread Realmオブジェクトは作成されたスレッドでのみアクセスできます。不正なスレッドからのレルムアクセスcopyFromRealmを使用してコピーが送信されたときの例外
スレッドは空きであってはいけませんか?あるスレッドからそれを生成し、それを別のスレッドで処理することはできますか?
これは、私が観測可能にする方法です。
public Observable<Brand> getAllBrands() {
return realm.where(Brand.class)
.findAll()
.asObservable()
.flatMap(Observable::from)
.map(brand -> realm.copyFromRealm(brand));
}
以下は、getAllBrands()をどのように観察するかです。
Observable<Brand> brandObservable = dataManager.getAllBrands();
brandObservable.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<Brand>() {
@Override
public void onCompleted() {
Log.d("reactive", "completed");
}
@Override
public void onError(Throwable e) {
Log.d("reactive", e.getMessage());
}
@Override
public void onNext(Brand brand) {
dataSource.add(brand.getName());
myAdapter.notifyDataSetChanged();
}
});
にあなたのワーカースレッドを変更する必要があることを意味しているルーパースレッド上で動作していること
注:それまでは、あなたはこのようにそれを自分で行うことによって、それを回避することができますあなたが使っている 'realm'は' io() 'スケジューラーにありません。 – EpicPandaForce