マゼンモハメド:
どのように私はそれがでなければなりません。この変数にアクセスするには、匿名の内部クラスからメソッド内の変数の値を変更することができ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;
}
Reaz Murshed:
IMHO、現在の実装addUser
機能は欠陥があります。私の理解あたりとして、ユーザーがに基づいてfirebaseデータベースに正常に追加されたかどうかを知りたいaddFlag
、この関数から返される値。
addFlag
firebaseリアルタイムデータベースからデータを取り戻すだろうFirebaseデータベース呼び出し後に更新されます。しかし、あなたはすぐにフラグが戻ってきているので、あなたは、あなたの背景ネットワークスレッドからの結果を待っていません。
それを達成するために、私が提案したいinterface
ベースの実装を。あなたは可能性がありますinterface
、次のように。
public interface FirebaseListener {
void onSuccess(boolean flag);
}
次に、あなたの中の余分なパラメータを追加addUser
することを渡す機能interface
あなたからActivity
か、Fragment
どこでこの関数を呼び出しています。したがって、次のように関数が見えるかもしれません。
// 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);
私はそれが役に立てば幸い。