[英]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
函數中添加一個額外的參數,以從調用此函數的Activity
或Fragment
傳遞該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.