Android 读取数据时Firebase权限被拒绝
我正在尝试从Firebase实时数据库读取一些数据,但每次尝试读取时,我都收到数据库错误,消息“权限被拒绝”。这是我用来读取数据的代码Android 读取数据时Firebase权限被拒绝,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试从Firebase实时数据库读取一些数据,但每次尝试读取时,我都收到数据库错误,消息“权限被拒绝”。这是我用来读取数据的代码 mAuth = FirebaseAuth.getInstance(); FirebaseUser currentUser = mAuth.getCurrentUser(); userId = currentUser.getUid(); DatabaseReference databaseReference = FirebaseD
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"
}
}
}
}
这也是数据库中的数据。
我想做什么?
-我做了两件事,第一件事是将数据库规则设置为public,但这对我不起作用,第二件事是我没有使用addValueEventListener
我使用了addChildEventListener
,但这也不起作用
因此,如果有人知道我在哪里犯了错误,请与我分享
提前谢谢 您的数据库规则是正确的,问题在于数据库读取代码。您可以直接将
DatabaseReference
设置为/users/
,然后直接将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) {
}
});
希望这有帮助:)那么,您是说正在调用onCancelled()回调?当你“将数据库规则设置为公共”时,你到底做了什么?当你说“将数据库规则设置为公共”是什么意思?我怀疑这取决于数据库规则,正如我所说的,我将它们设置为
{“规则”:{.read:true,.write:true}
但这对我没有帮助。我只是尝试了你的建议,但两种方法都没有触发,我仍然无法理解。我快速记录了数据库引用,它打印了一个用户的URL,这意味着它找到了正确的用户,但不幸的是没有检索到数据。我找到了我的错误所在,感谢您的回复现在工作。我投了赞成票,接受了你的回答。