1
我在Android应用程序中使用Realm。 当我执行一个异步事务来保存我的对象时,我发现有时回调从来没有被调用过。线程是Android的主线程,并且没有任何异常被捕获。 有什么问题? 有我的代码:当我执行与Realm的异步事务时,从不会调用回调
try (Realm realm = Realm.getDefaultInstance()) {
Log.i("ysd", "thread:"+Thread.currentThread());
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm bgRealm) {
Log.i("ysd", "copyToRealmOrUpdate");
bgRealm.copyToRealmOrUpdate(t);
}
}, new Realm.Transaction.Callback() {
@Override
public void onSuccess() {
Log.i("ysd", "Realm——onSuccess");
if(listener != null){
listener.onOk();
}
}
@Override
public void onError(Exception e) {
Log.i("ysd", "Realm:" + e.getMessage() + "," + e.getCause());
// transaction is automatically rolled-back, do any cleanup here
if(listener != null){
listener.onError(e);
}
}
});
}catch (Exception e){
Log.i("ysd", "Realm_Exception:" + e.getMessage() + "," + e.getCause());
e.printStackTrace();
}
可能是监听器的原因为空,最好是用监听器初始化发布代码。 – Rahul
“trym”实例在try catch块后关闭。当前的逻辑是,如果Realm实例关闭,'onSuccess'不会被发布到调用循环者。但我认为你的用户案例是有道理的。请参阅https://github.com/realm/realm-java/issues/1893,我们正在讨论是否应该一直公布'onSuccess'?在我们改变行为之前(也许),你可以用'Activity'或'Fragment'或其他东西来控制生命周期,以确保'onSuccess'将被发布。 – beeender