找不到孩子的孩子价值 Firebase Android
Posted
技术标签:
【中文标题】找不到孩子的孩子价值 Firebase Android【英文标题】:Cant find childs child value Firebase Android 【发布时间】:2017-01-02 22:03:55 【问题描述】:在我的 Main Activity 中,我通过在 whole 数据库中搜索用户 ID (user.getUid
) 来检查用户是否已经注册到我的应用程序,但每次(即使用户 ID已保存在数据库中),查询找不到它。
mAuthListener = new FirebaseAuth.AuthStateListener()
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth)
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user == null)
//User is signed out
startActivity(intentlogin);
Log.d(TAG, "onAuthStateChanged:signed_out");
finish();
else
//User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
//has user Username?
String Userid = user.getUid();
Query usernamequery = mRef.orderByChild("Userid").equalTo(Userid);
usernamequery.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot snapshot)
if (snapshot.exists())
//should go here when user id in database
// TODO: handle the case where the data already exists
return;
else
//This is where it always lands
// TODO: handle the case where the data does not yet exist
startActivity(intentusername);
finish();
这就是我的数据库的样子:
root:
Users:
customusername
Userid: "ondkinwakdnakjnxjexampleuseridindjan" (this it can't find!)
Username: "customusername"
【问题讨论】:
mRef 是如何初始化的? 如果mRef
像这样FirebaseDatabase().getInstance().getReference().child("Users")
那么它应该可以工作
我会将其添加为评论,因为它不完全符合您的要求。我建议您首先不应该像这样构建您的数据。使用 UserId 作为每个用户的入口点,而不是 customusername!然后您就完全消除了尝试搜索用户的问题。一旦您执行user.getUid();
,您就知道该用户应该在哪里;根 -> 用户 -> uid。无需搜索或订购,从长远来看将为您省去很多麻烦。
会不会和我做的一样?
如果我正确阅读了您的帖子,则不会。正如您所说,您正在整个数据库中搜索 id。如果您有 10,000 个用户怎么办?通过使用 userId 作为您不需要搜索的每个用户的键,您不使用查询,您只需在该节点上设置一个侦听器:root -> Users -> userId
【参考方案1】:
请记住,即使您正在查询单个项目,查询也总是返回值列表。遍历这些值。
Query usernamequery = mRef.orderByChild("Userid").equalTo(Userid);
usernamequery.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot snapshot)
if (snapshot != null && snapshot.getChildren != null)
//Define a model class for user that contains UserId and Username
for(DataSnapshot child : snapshot.getChildren())
Model model = child.getValue(Model.class);
//now, get the UserId and username from the model class
model.getUserId();
else
//This is where it always lands
// TODO: handle the case where the data does not yet exist
startActivity(intentusername);
finish();
【讨论】:
目前这对我来说可能不是最好的答案,但它在另一个课程中会派上用场(用户名是否被占用)谢谢以上是关于找不到孩子的孩子价值 Firebase Android的主要内容,如果未能解决你的问题,请参考以下文章