阅读数据时,Firebase权限被拒绝

时间:2018-01-22 16:19:10

标签: android firebase firebase-realtime-database

我正在尝试从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"
      }
    }
  }
}

这也是数据库中的数据。 enter image description here

我试图做什么?   - 我先做了两件事我将数据库规则设置为公开,但这对我不起作用,我做的第二件事是使用addValueEventListener我使用的addChildEventListener但是也没有工作。

所以,如果有人知道我犯了哪些错误,请与我分享。

提前致谢。

1 个答案:

答案 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) {
    }
});

希望这会有所帮助:)