Android 读取数据时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

我正在尝试从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"
      }
    }
  }
}
这也是数据库中的数据。

我想做什么? -我做了两件事,第一件事是将数据库规则设置为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,这意味着它找到了正确的用户,但不幸的是没有检索到数据。我找到了我的错误所在,感谢您的回复现在工作。我投了赞成票,接受了你的回答。