Java Firebase数据库设置

时间:2018-03-07 10:31:59

标签: 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的Record表中后,我将电子邮件中的Rate中的值更改为:“abc”从“2”更改为“1”。更改仅在“帐户”表中进行,但不知何时,“记录”表中保存的记录随“帐户”表中的修改而更改。初始速率:当在账户表中进行更改时,记录表中的“2”变为“1”,其中速率:“2”变为速率:“1”。在搜索之后,我怀疑这是由于strRate的onDataChanged()而发生的。希望得到答案!

1 个答案:

答案 0 :(得分:0)

我想你想知道为什么会这样。这正是您所猜测的,您已将价值监听器addValueEventListener()附加到帐户位置,并且只要该节点发生变化,您就会收到回叫对这个听众。

如果您希望仅发生一次,则应使用singleValueEvent个侦听器。如果您想要控制何时想要接收值,但又想要使用valueEventListener,那么您应该保留该听众的引用,并在您不想要它时将其从引用中删除了。