【问题标题】:Firebase database: Permission denied for reading?Firebase 数据库:读取权限被拒绝?
【发布时间】:2020-04-03 20:32:05
【问题描述】:

我正在尝试从我的 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);

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以通过将 / 前缀添加到 Collection 来访问该集合,这意味着它会被调用。就像我的一样,我已经尝试过这个并且效果很好希望这会有所帮助。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-25
        • 2019-11-15
        • 2016-09-22
        • 2019-04-27
        • 2020-10-08
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        相关资源
        最近更新 更多