どのように私は匿名の内部クラスから側メソッドで変数の値を変更できますか?

マゼンモハメド:

どのように私はそれがでなければなりません。この変数にアクセスするには、匿名の内部クラスからメソッド内の変数の値を変更することができ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、この関数から返される値。

addFlagfirebaseリアルタイムデータベースからデータを取り戻すだろう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);

私はそれが役に立てば幸い。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=28370&siteId=1