Firebase数据库:阅读权限被拒绝?

时间:2017-08-20 21:55:50

标签: android firebase firebase-realtime-database android-recyclerview

我正在尝试从我的firebase数据库中读取并将其与适配器一起放入Recyclerview,但每次我都知道:

08-20 18:26:53.754 3430-3653/blabla.com.notescloud W/SyncTree: Listen at / failed: DatabaseError: Permission denied
08-20 18:26:53.764 3430-3430/blabla.com.notescloud W/FirebaseRecyclerAdapter: com.google.firebase.database.DatabaseException: Firebase Database error: Permission denied
     at com.google.firebase.database.DatabaseError.toException(Unknown Source)
     at com.firebase.ui.database.FirebaseRecyclerAdapter.onCancelled(FirebaseRecyclerAdapter.java:175)
     at com.firebase.ui.database.ObservableSnapshotArray.notifyListenersOnCancelled(ObservableSnapshotArray.java:135)
     at com.firebase.ui.database.FirebaseArray.onCancelled(FirebaseArray.java:129)
     at com.google.android.gms.internal.zzdpw.zza(Unknown Source)
     at com.google.android.gms.internal.zzdvg.zzbur(Unknown Source)
     at com.google.android.gms.internal.zzdvo.run(Unknown Source)
     at android.os.Handler.handleCallback(Handler.java:751)
     at android.os.Handler.dispatchMessage(Handler.java:95)
     at android.os.Looper.loop(Looper.java:154)
     at android.app.ActivityThread.main(ActivityThread.java:6077)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

我的规则还可以(对于记录,写入数据库的工作非常好):

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid",
        ".read": "$uid === auth.uid"
      }
    }
  }
}

我的数据库:

database 这是我主要活动中的回收设置:

rv = findViewById(R.id.rv_notes); //RecyclerView
rv.setLayoutManager(new LinearLayoutManager(this));

ref = FirebaseDatabase.getInstance().getReference(); // Getting a reference of the database

mAdapter = new FirebaseRecyclerAdapter<Note, NoteHolderView>(
        Note.class,
        android.R.layout.two_line_list_item,
        NoteHolderView.class,
        ref) {
    @Override
    public void populateViewHolder(NoteHolderView holder, Note note, int position) {
        holder.setmTitleField(note.getmTitle());
        holder.setmTimeField(note.getTimeFormatted(getApplicationContext()));
    }
};
rv.setAdapter(mAdapter);

希望你能帮助我解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:3)

您正在尝试读取数据库的顶部,并且由于您没有为此指定规则,因此会自动拒绝该规则。 试试这个

ref = FirebaseDatabase.getInstance()
                      .getReference()
                      .child("users")
                      .child(FirebaseAuth.getCurrentUser().getUid());

答案 1 :(得分:0)

您可以通过在Collection前面加上/前缀来访问该收藏集,这意味着它会被调用。就像我尝试过的那样,它工作得很好,希望对您有所帮助。

 db=FirebaseDatabase.getInstance();
    dbref=db.getReference("/Course_list");

在这段代码中,我在集合中添加了“ /”前缀。