Android,Retrofit,& RxJava:“从错误的线程访问领域”

时间:2017-04-18 23:05:05

标签: android realm rx-java2

我有一个我需要更改的本地存储的域对象>然后上传到我的后端。所以在userService.updateUser()里面我通过调用:Realm realm = Realm.getDefaultInstance()并将该User对象传递给我的retrofit2调用来获取我当前的用户对象,但是我得到了Realm错误:

从不正确的线程访问领域。 Realm对象只能在创建它们的线程上访问。

所以我订阅了Schedulers.newThread()并在AndroidSchedulers.mainThread()上观察,所以我想这就是为什么会抛出错误......我怎么能避免这个问题呢?

mCompositeDisposable.add( userService.updateUser()
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribeWith(new DisposableObserver<User>(){
                            @Override
                            public void onNext(User user) {

                                if(mProgressDlg != null)  mProgressDlg.dismiss();
                            }
                            @Override
                            public void onError(Throwable t) {
                                if(mProgressDlg != null)  mProgressDlg.dismiss();
                                alertDlg.showIt(mResources.getString(R.string.err_saving_profile),
                                        stringFormatter.getApiErrorMsg(t), "",
                                        "", mParentActivity, JAlertDialog.POSITIVE,null);
                            }
                            @Override
                            public void onComplete() { }
                        }));

1 个答案:

答案 0 :(得分:-1)

这有效:

mCompositeDisposable.add( userService.updateUser( Realm.getDefaultInstance().copyFromRealm(mUser)  )
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith
   ...