当使用流式复制Realm对象而不是引用并在Schedulers.IO线程上观察它时,会出现著名的异常消息“从错误的线程访问Realm。 Realm对象只能在创建它们的线程中访问。”
这个复制品不应该是无线程的吗?我可以在一个线程上生成它并在另一个线程上处理它吗?
下面是我创建可观察对象的方式。
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();
}
});