簡體   English   中英

從內部匿名類訪問和修改變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM