我正在尝试从Firebase实时数据库中读取一些数据,但每次当我尝试接收数据库错误并且消息权限被拒绝时。这是我用来读取数据的代码。
mAuth = FirebaseAuth.getInstance();
FirebaseUser currentUser = mAuth.getCurrentUser();
userId = currentUser.getUid();
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
User user = new User();
user.setFullName(ds.child("users").child(userId).getValue(User.class).getFullName());
user.setEmail(ds.child("users").child(userId).getValue(User.class).getEmail());
Log.i("info", " User Full name" + user.getFullName());
userFullName.setText(user.getFullName());
userEmail.setText(user.getEmail());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.i("Info", "" + databaseError.getMessage());
}
});
这些也是我的数据库规则
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
我试图做什么?
- 我先做了两件事我将数据库规则设置为公开,但这对我不起作用,我做的第二件事是使用addValueEventListener
我使用的addChildEventListener
但是也没有工作。
所以,如果有人知道我犯了哪些错误,请与我分享。
提前致谢。
答案 0 :(得分:1)
您的数据库规则是正确的,问题出在数据库读取代码中。您可以直接将DatabaseReference
设置为/users/<userId>
,然后直接将DataSnapshot
的值转换为User
类。
以下是代码:
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("users").child(userId);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
userFullName.setText(user.getFullName());
userEmail.setText(user.getEmail());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
希望这会有所帮助:)