就火力地堡DATABSE查询为Android

问题描述:

我知道有很多similiar问题,但没有人有我找的,所有我咨询有解答谈论childrenEvetListeners问题的答案...就火力地堡DATABSE查询为Android

我的问题是简单得多。我的Firebase数据库: enter image description here

我的问题是:我如何进行查询,检查用户名是否为“fofof”?

谢谢!

+0

相关.. http://stackoverflow.com/questions/29403068/how-to-check-if-a-child-exists-in-firebase –

+0

是,但一直无人接听 – rainman

你有一个混合结构,这使事情变得复杂。但如果你只是/users/-K....下寻找匹配,你可以找到与之相匹配的是这样的:

Query query = ref.child("users").orderByChild("User/username").equalTo("fofof"); 
query.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) { 
      Log.i(TAG, "fofof exists and is stored under key "+userSnapshot.getKey()); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting Post failed, log a message 
     Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
    } 
}); 

关于当前设置了一些警告,虽然:

  • 你存储用户在推送ID下。虽然推送ID对于没有自然键且您想按时间顺序存储的集合非常适合,但最好将用户存储在UID下。所以例如/users/s5iu...
  • 您将用户信息嵌套在比所需更深的一层。虽然这个工作,我会摆脱在你的树User级别。
  • 你有一个用户直接根据/users,而其他人存储更深一层。创建这样一个混合模型是一个坏主意。
+0

非常感谢弗兰克,因为我知道推入ID被插入,因为我使用push()函数来创建新节点,所以我试图避免使用push(),但是在这种情况下,每次插入新用户都会覆盖现有节点,并且没有新节点创建,有没有什么办法来创建新的节点(在我的情况下为用户),而不使用push()? – rainman

+0

'ref.child(“users”)。child(userId).setValue(...)' –