用户是我的根节点,因为我通过获取经过身份验证的用户的uid
创建了各种子节点。在这些孩子(uid
)中,他们是各种孩子,如信息,一般维护,投诉。
我想显示来自所有用户(gCity
s)的常规维护子项的gProductModel
,uid
等一些详细信息。每个uid都有不同的gCity
值等。在常规维护下,我想通过在适配器上设置listview
来检索所有数据。
我无法检索它。
数据库图片
retreive代码
当我尝试使用' 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) {
}
});
答案 0 :(得分:0)
请使用此代码:
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
}
}
希望它有所帮助。