我得到Alex Mamo's Solution以检查我的数据库中是否存在唯一值,但快照始终为null . 解决方案在这里:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userNameRef = rootRef.child("Users").child("Nick123");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists()) {
//create new user
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
userNameRef.addListenerForSingleValueEvent(eventListener);
我的数据库看起来像这样:
users
(auto-generated push token ID)
fullname
username
gender
...
我不知道它是否是正确的方法,但我使用push()方法将用户对象添加到数据库,并且此方法生成如上所述的推送令牌ID .
因此,为了不创建重复的用户,我应该用上述解决方案更改什么?有没有更好的方法来做到这一点?也许喜欢用firebase auth方法检查firebase uid?
UPDATE 我的数据库截图:
如您所见,'users'下方的字符串与用户的uid不同 .
2 回答
在将用户详细信息保存到数据库中时,这不是最佳做法 . 首先,您应该实现Firebase Authentication然后为了检查数据库中是否存在用户,您应该使用以下代码行:
因此,解决此问题的关键是调用
child()
方法并将uid
作为参数传递,而不是调用生成随机唯一标识符的push()
方法 .如果你有这个数据库:
然后检查用户是否存在,您需要执行以下操作:
首先,如果您有
users
小写字母,那么在子项内添加users
,那么您需要使用查询来检查全名是否等于Nick123 .通常数据库的结构如下:
属性是
key:value
,键是标识符,Nick123是值,所以在child()
方法中你需要写入fullname
而不是Nick123的标识符 .然后,由于您可以获取userId,您可以这样做: