我已经创建了一个ListView,它应该显示存在的firebase用户的所有用户名。但是现在我遇到了一个问题,我不知道如何获得用户ID的孩子。当然我可以在数据库中创建一个带有ID的数组,但如果有更多的人在应用程序上注册,它就不会自动执行。所以你知道如何让孩子的所有孩子?看起来像这样
Root
iadf09f08asd0fasd
Infos
Username: LeagueHans
i297f9pb2f92
Infos
Username: Julian
08bfbüqw0efü
Infos
Username: Markus
来自评论:
DatabaseReference root = FirebaseDatabase.getInstance().getReference();
root.child("Users").child(What to write here).child("Infos").child("Username");
我不知道如何将小孩(iadf09f08asd0fasd
)作为孩子。
答案 0 :(得分:2)
当您对某个位置运行查询时,您将立即获得该位置下的节点子集。你不能在那之下检索较低级别的孩子。
因此,要么您必须检索所有数据,然后只需处理客户端的用户名,或者(最好)您需要更改数据模型以更好地适应您的用例。
root.child("Users").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildName) {
String username = snapshot.child("Infos/Username).getValue(String.class);
}
...
这将有效,但意味着您要检索的数据超出了您的需要。这是Firebase建议您不嵌套数据的众多原因之一,除非您始终需要组合数据。
替代方案是:
我经常建议您在Firebase中为应用的屏幕建模。因此,如果要在应用程序中显示用户名列表,则应在数据库中保留用户名列表:
Usernames
iadf09f08asd0fasd: "LeagueHans"
i297f9pb2f92: "Julian"
08bfbüqw0efü: "Markus"
现在您可以使用以下命令获取用户名:
root.child("Usernamess").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildName) {
String username = snapshot.getValue(String.class);
}
...
答案 1 :(得分:0)
试试这个......
每当数据库发生变化时,firebase addValueEventListener
都会触发,因此请使用它来检索数据。
mReference.child("Root").child("Infos").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
YourModel mModel = eventSnapshot.getValue(YourModel.class);
Log.e("NAME " ,""+ mModel);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});