Android Firebase查询以child作为uid的数据
Users是我的根节点,因为我通过获取经过身份验证的用户的Android Firebase查询以child作为uid的数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,Users是我的根节点,因为我通过获取经过身份验证的用户的uid创建了各种子节点。在这些孩子(uid)中,他们有各种各样的孩子,如信息、一般维护、投诉 我想显示一些详细信息,如来自所有用户(uids)的常规维护子项的gCity,gProductModel)。每个uid将具有不同的值gCity,等等。在常规维护下,我希望通过在适配器和listview上设置来检索所有数据 我无法找回它 数据库映像 检索代码 当我试图使用“getuid()”从当前用户检索数据时(如下所示),它工作正常。但是,当我
uid
创建了各种子节点。在这些孩子(uid
)中,他们有各种各样的孩子,如信息、一般维护、投诉
我想显示一些详细信息,如来自所有用户(uid
s)的常规维护子项的gCity
,gProductModel
)。每个uid将具有不同的值gCity
,等等。在常规维护下,我希望通过在适配器和listview
上设置来检索所有数据
我无法找回它
数据库映像
检索代码
当我试图使用“getuid()”从当前用户检索数据时(如下所示),它工作正常。但是,当我尝试使用“getkey()”检索所有用户数据时,它不起作用
user = FirebaseAuth.getInstance().getCurrentUser();
ref= FirebaseDatabase.getInstance().getReference("Users")
.child(user.getUid())
.child("General Maintenance");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(list_users.size() > 0)
list_users.clear();
for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
{
Generalperson user =
postSnapshot.getValue(Generalperson.class);
list_users.add(user);
}
if(list_users.size() != 0)
{ ListViewAdapter adapter = new
ListViewAdapter(ServicehistoryActivity.this, list_users);
list_data.setAdapter(adapter);}
else
{
list_data.setVisibility(View.INVISIBLE);
k.setVisibility(View.VISIBLE);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
请使用此代码:
DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference().child("Users");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String userId = ds.getKey();
DatabaseReference userIdRef = FirebaseDatabase.getInstance().getReference().child("Users").child(userId);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.child("General Maintenence").getChildren()) {
String gCity = ds.child("gCity").getValue(String.class);
String gEmail = ds.child("gEmail").getValue(String.class);
String gPhone = ds.child("gPhone").getValue(String.class);
//and so on
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
userIdRef.addListenerForSingleValueEvent(valueEventListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(eventListener);
如果出现此错误,Listen at/Users failed:DatabaseError:Permission denied
是因为您无权访问数据库,请检查实时数据库中的“规则”选项卡并进行以下更改:
{
"rules": {
".read": true,
".write":true
}
}
希望有帮助。使用getUid()将显示当前正确使用它的人的详细信息?我的问题是我想从所有用户的通用维护子系统中检索gCity、gEmail。是的,这是正确的。拥有身份验证中的
uid
,您可以在数据库参考中使用它。但我的问题是,我想从“所有”用户的常规维护子级检索gCity、gEmail,并通过在ListView上设置适配器同时显示它们。请查看我更新的答案以获取所有用户的数据。getKey()只提供引用指向的位置中的最后一个标记,因此如何获取整个用户密钥。您的问题中包含了代码和JSON树的图片。请将其替换为实际代码和JSON作为文本。您可以通过单击中的导出JSON链接轻松获取后者。将代码和JSON作为文本它是可搜索的,允许我们轻松地使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。