簡體   English   中英

如何從匿名內部類更改側方法中變量的值?

[英]How can I change value of variable in side method from anonymous inner class?

如何從匿名內部類更改方法內部變量的值,要訪問此變量,它必須是final ,但是如果變量 final 無法更改其值,如何使用 java 解決此問題?

這是我的代碼,我想更改addFlag的值。

public static boolean addUser(UserModle user){
    Boolean addFlag ;
    dbUser = FirebaseDatabase.getInstance().getReference("user");

    Task task = dbUser.child(user.getId()).setValue(user);
    task.addOnSuccessListener(new OnSuccessListener() {
        @Override
        public void onSuccess(Object o) {
            addFlag  = true;
        }
    });

    task.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {

        }
    });
    return addFlag;
}

恕我直言, addUser函數的當前實現存在缺陷。 根據我的理解,您想知道用戶是否已根據此函數返回的addFlag值成功添加到您的addFlag數據庫中。

一旦 Firebase 數據庫調用從 Firebase 實時數據庫中取回數據, addFlag將被更新。 但是,您將立即返回標志,因此您無需等待后台網絡線程的結果。

為了實現這一點,我想建議一個基於interface的實現。 您可能有如下interface

public interface FirebaseListener {
    void onSuccess(boolean flag);
}

然后在addUser函數中添加一個額外的參數,以從調用此函數的ActivityFragment傳遞該interface 因此,該函數可能如下所示。

// Change the return type to void, as we are not expecting anything from this function. 
// Instead, we will wait for the success callback using the interface
public static void addUser(UserModle user, FirebaseListener listener) {

    dbUser = FirebaseDatabase.getInstance().getReference("user");

    Task task = dbUser.child(user.getId()).setValue(user);
    task.addOnSuccessListener(new OnSuccessListener() {
        @Override
        public void onSuccess(Object o) {
            listener.onSuccess(true);
        }
    });

    task.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            listener.onSuccess(false);
        }
    });
}

現在在您的活動或片段中實現偵聽器,如下所示。

public MyActivity extends AppCompatActivity implements FirebaseListener {
    // ... Other functions of your activity 
    @Override
    public void onSuccess(boolean flag) {
        if (flag) {
            // User add successful. Do something here
        } else {
            // User add not successful. Do something here
        }
    }
}

現在,在調用addUser函數時,您應該將回調偵聽器與它一起傳遞,如下所示。

addUser(user, this);

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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