java - 为什么在 Android Studio 中使用 Firebase 数据库时 onClick 内的 "If Condition"不起作用?

标签 java android firebase firebase-realtime-database

a2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //below
        DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
        ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
            @Override
            public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
                ra2 = dataSnapshot.child("a2").getValue(String.class);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        //fetching face value
        ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
            @Override
            public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
                rface = dataSnapshot.child("face").getValue(String.class);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        //fetching nothingdb which is equals to "zero" in Firebase by default.

        ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
            @Override
            public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
                nothing = dataSnapshot.child("nothingdb").getValue(String.class);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        //fetching addeddb which is equals to "one" in Firebase by default.

        ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
            @Override
            public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
                added = dataSnapshot.child("addeddb").getValue(String.class);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        //starting if condition
        if (ra2==nothing){

            if (rface==nothing){
                a2.setBackgroundResource(R.drawable.rounded);{
                    Firebase refChild = ref2.child("a2");
                    refChild.setValue("rounda2");
                    refChild = ref2.child("face");
                    refChild.setValue("one");
                }

                else if (rface==added) {
                    a2.setBackgroundResource(R.drawable.crossed);
                    {
                        Firebase refChild = ref2.child("a2");
                        refChild.setValue("crossa2");
                        refChild = ref2.child("face");
                        refChild.setValue("zero");
                    }
                }
            }
        });
    }
});

我正在尝试使用上面编写的代码,以便一旦我单击按钮,按钮的背景图像就会根据 Firebase 中存在的数据进行更改,但 If 条件由于某种原因不起作用。

它只是忽略 if (ra2==nothing){ 以及下一个 if 条件。

最佳答案

监听器onDataChange()回调是异步的。当您比较 ra2nothingaddedrface 的相等性时,它们不会包含有效结果,因为 onDataChange() 方法尚未执行。 This answer相关问题更详细地解释了执行顺序。

此外,要比较字符串是否相等,您不能使用 == 运算符。您必须使用equals()方法或TextUtils.equals() .

关于java - 为什么在 Android Studio 中使用 Firebase 数据库时 onClick 内的 "If Condition"不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42522268/

相关文章:

android - 如何根据用户方向显示谷歌地图

android - Google Play商店无法识别新包装名称?

java - 如何解决在单节点上工作但在 2 节点集群上失败的问题?

java - JavaFX 2D 游戏中的对象动画

android - WARN : Unable to load JNA library (OS: Mac OS X 12. 2) 在 Release模式下运行 flutter 应用程序时发出警告。 (M1 Mac)

android - Firebase Crashlytics 没有为发布 apk 上传崩溃

android - android 中如何管理多个用户

firebase - Firebase 提供地理空间吗?

java - Java集群中的垃圾收集

java - Java 的 nBuilder 替代品