【问题标题】:Java Firebase Database SettingJava Firebase 数据库设置
【发布时间】:2018-03-07 10:31:58
【问题描述】:
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 表中后,我将 Account with email: "abc" 中的 Rate 值从 "2" 更改为 "1"。更改仅在 Account 表中进行,但不知何故,Record 表中保存的记录随着 Account 表中的修改而更改。当在账户表中进行更改时,记录表中的初始费率:“2”更改为“1”,其中费率:“2”更改为费率:“1”。在四处搜索之后,我怀疑这是由于 strRate 的 onDataChanged() 而发生的。希望得到答案!

【问题讨论】:

  • 能否分享整个页面的代码?

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


【解决方案1】:

我假设您想知道为什么会这样。这正是您所猜测的,您已将值侦听器 addValueEventListener() 附加到 Accounts 位置,并且该节点中的任何内容发生变化时,您都会收到对该侦听器的回调。

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

【讨论】:

  • 感谢您的帮助!但我没有更改Listeners,而是添加了removeEventListener,它解决了我的问题!谢谢!
猜你喜欢
  • 2021-07-25
  • 2021-05-15
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2017-05-18
相关资源
最近更新 更多