Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用firebase数据库实时更新android应用程序中的按钮点击事件_Android_Firebase_Firebase Realtime Database_Iot_Android Button - Fatal编程技术网

如何使用firebase数据库实时更新android应用程序中的按钮点击事件

如何使用firebase数据库实时更新android应用程序中的按钮点击事件,android,firebase,firebase-realtime-database,iot,android-button,Android,Firebase,Firebase Realtime Database,Iot,Android Button,我是android和firebase开发的新手。我一直在努力在firebase中编写我的应用程序的按钮,现在我想检索它们,使他与数据库相关。我的java代码有点弱。我的想法是:当我从数据库中更改按钮值时,它们应该在app phone上更新 这段代码写在数据库“手动按钮的状态(它是一个开关)”中,我想让他阅读并根据数据库更改他的状态: //-------------------------------------------Btn FAN --------------------------

我是android和firebase开发的新手。我一直在努力在firebase中编写我的应用程序的按钮,现在我想检索它们,使他与数据库相关。我的java代码有点弱。我的想法是:当我从数据库中更改按钮值时,它们应该在app phone上更新

这段代码写在数据库“手动按钮的状态(它是一个开关)”中,我想让他阅读并根据数据库更改他的状态:

 //-------------------------------------------Btn FAN  ----------------------------
    dref = FirebaseDatabase.getInstance().getReference();
    myRef = dref.child("onfan");
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            String fan = (String) dataSnapshot.child("onfan").getValue(String.class);
            if (fan == "1") {
                mFirebaseBtnFan.setTextColor(col1);
            }
            else {
                mFirebaseBtnFan.setTextColor(col2);
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError)
        {
        }
    });
    mFirebaseBtnFan.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if ((cnt % 2) == 0) {
                dref.child("onfan").setValue("1");
                mFirebaseBtnFan.setTextColor(col1);
                cnt++;
            } else {
                dref.child("onfan").setValue("0");

                mFirebaseBtnFan.setTextColor(col2);
                cnt++;
            }
        }
    });
    

要从数据库中读回该值,请执行以下操作:

dref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // This code runs when the data is read first time, and whenever it changes
        String value = dataSnapshot.getValue(String.class);
        // ... set the value to the UI
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "loadData", databaseError.toException());
    }
};


另请参阅Firebase文档。

我找到的每个解决方案对我来说都很好

//-------------------------------------------Btn FAN  work fine ----------------------------
    dref = FirebaseDatabase.getInstance().getReference();
    myRef = dref.child("onfan");
    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            if(dataSnapshot.exists()) {//----------------------------i add test snapshot
                String fan = dataSnapshot.getValue(String.class);
                if (fan.equals("1")) { //-----------------------------i change " == " to  " String.equals(String2) "
                    mFirebaseBtnFan.setTextColor(col1);
                } else {
                    mFirebaseBtnFan.setTextColor(col2);
                }
                                }
        }
        @Override
        public void onCancelled(DatabaseError databaseError)
        {
        }
    });
    mFirebaseBtnFan.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if ((cnt % 2) == 0) {
                dref.child("onfan").setValue("1");
                mFirebaseBtnFan.setTextColor(col1);
                cnt++;
            } else {
                dref.child("onfan").setValue("0");

                mFirebaseBtnFan.setTextColor(col2);
                cnt++;
            }
        }
    });

但是在我的例子中,如果你想设置按钮的状态,我想应该调用
onDataChange
,我怎么做(使用开关按钮)。所以类似于
mFirebaseSwitch.setChecked(value.equals(“1”))
的东西,我把注释放在我的答案中。对不起..你能解释更多吗plzI给了你你需要的确切代码。哪一部分对您不起作用?我在代码中找不到错误,尽管我按原样操作