我得到了亚历克斯·马莫的解决方案 https://stackoverflow.com/a/47893879/4176989为了检查我的数据库中是否存在唯一值,但快照始终为空。解决方案在这里:
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
My database screenshot:
As you see the string just below 'users' is not the same as user's uid.
将用户详细信息保存到数据库时,这不是最佳实践。首先,你应该实施Firebase 身份验证 https://firebase.google.com/docs/auth/然后为了检查数据库中是否存在用户,您应该使用以下代码行:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists()) {
//create new user
}
}
@Override
public void onCancelled(DatabaseError error) {
Log.d("TAG",error.getMessage()); //Don't ignore potential errors!
}
};
uidRef.addListenerForSingleValueEvent(eventListener);
所以解决这个问题的关键是调用child()
方法并将 UID 作为参数传递,而不是调用push()
生成随机唯一标识符的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)