Java Firebase 数据库设置

标签 java android firebase firebase-realtime-database firebase-authentication

Record{
    Push_key(): 
    {
        duration: "30"
        rate: "2"
    }
}

Account{
    Push_key():
    {
        email:"abc@gmail.com"
        Rate:"2"
    }
}

上面显示了 Firebase 数据库结构。 我有一个按钮,单击时可以将记录保存到数据库中:

btnSave.setOnClickListener(new OnClickListener(){
    public void onClick(View v){
        DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Record");
        String key = ref.push().getKey();
        ref.child(key).child("rate").setValue(strRate);
    }
});

其中 strRate 被定义为公共(public)并声明如下:

FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();
String email = user.getEmail();
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Account");
Query query = ref.orderByChild("email").startAt(email).endAt(email+"\uf8ff");
query.addValueEventListener(new ValueEventListener(){
    public void onDataChange(DataSnapshot dataSnapshot){
        for (DataSnapshot child : dataSnapshot.getChildren()){
            strRate = child.child("Rate").getValue().toString();
            ...
        }
    }
});

问题:将记录保存到 firebase 中的记录表中​​后,我将电子邮件帐户中的费率值:“abc”从“2”更改为“1”。更改仅在帐户表中进行,但不知何故,记录表中保存的记录随着帐户表中所做的修改而更改。当帐户表中的费率:“2”更改为费率:“1”时,记录表中的初始费率:“2”更改为“1”。环顾四周后,我怀疑这是由于该 strRate 的 onDataChanged() 造成的。希望得到答复!

最佳答案

我想你想知道为什么会发生这种情况。正如您所猜测的那样,您已将值监听器 addValueEventListener() 附加到 Accounts 位置,并且只要该节点发生变化,您就会收到对此监听器的回调。

如果您希望这种情况只发生一次,则应该使用 singleValueEvent 监听器。如果您想控制何时接收值,但仍想使用 valueEventListener,您应该保留该监听器的引用,并在不再需要时将其从引用中删除。

关于Java Firebase 数据库设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49149683/

相关文章:

java - 如何将对象向上转换为 java.util.Map?

java - 关于采集框架

java - 当项目是 .jar 或在 IDE 中时,如何动态访问 src/main/resources 中的文件

android - 动态创建drawable资源路径

javascript - Firebase goOffline() 触发得太早

java - 方法在简单的 JFrame 中返回 null

javascript - 如何在各种平台上启动聊天客户端应用程序

java - ImageButton不可点击 - AndroidStudio

java - Firestore collectionReference 返回所有文档

java - 在 firebase android 中拯救一个 parent 下的许多 child