在Realm中,我正在使用executeTransactionasync
方法并且在执行中我从实用程序类调用一个方法但是当我调用此方法时出现错误
Realm对象只能在创建它们的线程上访问
Utils.class
public void update_data(final Realm realm) {
data bgTran = realm.where(data.class).equalTo("obj", "hello").findFirst();
if(bgTran!= null){
bgTran.settime("7 June");
}
}
活动类代码
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(final Realm bgRealm) {
utils.update_data(realm);
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
//gettting Error Realm objects can only be accessed on the thread they where created
}
});
任何人都可以告诉我,因为相同的领域正在通过方法调用,为什么在UI线程中然后我为什么会收到错误。
但是当我在Util类中编写整个executetransactionasync
时,它运行得很好。
Utils.class
public void update_data(final Realm realm) {
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(final Realm bgRealm) {
data bgTran = bgRealm.where(data.class).equalTo("obj", "hello").findFirst();
if(bgTran!= null){
bgTran.settime("7 June");
}
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
}
});
}
编辑 - 问题与标记的问题不同,因为我知道onpostExecute(UI线程),doInBackground(后台线程)他们都访问不同的线程,但这里的事情是因为我的代码是在Activity类中它会有一个looper,所以当我在util类中调用一个方法时,这个类也可以访问looper因为我仍然在UI Thread中然后为什么会出现这个错误,如果这个错误也是如此即将到来它也应该是我提到的第二个案例,但它不是?
另外,我如何编写像我在update_data()
中编写的常用逻辑并在任何地方使用它?因为否则,我将不得不在每个领域executeTransactionasync
中一次又一次地编写相同的代码?