[英]Access and modify a variable from inner anonymous class
我有以下代碼:
boolean gameSuccess = false;
@Override
public boolean saveMission(final Mission mission) {
realm = Realm.getInstance(realmConfiguration);
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealm(mission);
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
Log.d(TAG, "onSuccess: mission saved");
realm.close();
missionSuccess = true;
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
Log.d(TAG, "onError: mission failed");
realm.close();
missionSuccess = false;
}
});
return gameSuccess;
}
即使調用了onSuccess,gameSuccess始終為false。 完成這項工作的方法是什么?
異步不會阻止,所以您的代碼是錯誤的。 交易不會在返回之前發生,而是在任何未指定的時間之后發生,這就是為什么它總是錯誤的。
您需要提供方法的回調或將事務轉換為阻塞
public void saveMission(final Mission mission, Callback callback) {
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealm(mission);
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
Log.d(TAG, "onSuccess: mission saved");
realm.close();
callback.onSuccess();
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
Log.d(TAG, "onError: mission failed");
realm.close();
callback.onError();
}
});
}
要么
realm.executeTransaction(...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.