【发布时间】:2018-11-13 11:23:08
【问题描述】:
我有一个基于 firebase 数据库的应用聊天,我想知道是否已经存储了特定值。
根据上面的结构,如何防止两个相等的值(红色)插入同一个孩子(蓝色)?
编辑
我解决了这个问题如下: 1)我通过唯一的用户名改变了每个节点的推送值; 2)我用下面的代码检查了重复值:
FirebaseDatabase.getInstance().getReference().child("friend").child(value_in_blue)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.hasChild(username)) {
//value does not exists
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
感谢 Frank van Puffelen 和 Jins Lukose 在这个问题上给我指导。
【问题讨论】:
-
没有原子方法可以防止树中出现重复的值。解决方案通常是有一个额外的数据结构,其中值用作键,因为根据定义,节点中的子键保证是唯一的。见stackoverflow.com/q/39912201、stackoverflow.com/a/25328654、stackoverflow.com/a/20291163、stackoverflow.com/a/35244705
标签: java android firebase firebase-realtime-database