当流式处理领域对象的副本而不是领域引用并在Schedulers.IO线程上观察它时,会发生着名的异常消息"Realm从不正确的线程访问."Realm对象只能在它们创建的线程中访问.
该副本不应该是无线程的吗?我可以从一个线程生成它并在不同的线程上处理它吗?
这就是我创建可观察的方式.
public Observable<Brand> getAllBrands() {
return realm.where(Brand.class)
.findAll()
.asObservable()
.flatMap(Observable::from)
.map(brand -> realm.copyFromRealm(brand));
}
Run Code Online (Sandbox Code Playgroud)
以下是我观察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();
}
});
Run Code Online (Sandbox Code Playgroud)