从Firebase参考

时间:2017-06-18 14:40:47

标签: android firebase firebase-realtime-database

我正在尝试从公共Firebase数据库中检索一些数据,其中我存储了一个简单的高分列表。我的问题是onDataChange()实际上从未被调用或无法执行任何操作。

以下是我的代码的一部分,在每次创建某个活动时运行的方法中调用该代码:

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    Log.i(TAG_FIREBASE_READER_HIGHSCORE , ref.child("highscore-list").toString());

    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.i(TAG_FIREBASE_READER_HIGHSCORE , "entered onDataChange for FirebaseReader");
            Toast.makeText(fromContext, "Reading online highscores, please wait...", Toast.LENGTH_LONG).show();

            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                Log.i(TAG_FIREBASE_READER_HIGHSCORE, "found child " + snapshot.toString());
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.i(TAG_FIREBASE_READER_HIGHSCORE, "onCancelled was called");
        }

    });

在我的logcat输出中,我得到onCancelled被调用,但不是onDataChange。我已经确认引用是正确的,通过引用在logcat中吐出子“highscore-list”,它提供了正确的输出(我可以解决它)。

我没有使用任何类型的Firebase身份验证,因此我的数据库规则如下所示:

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

如果这不起作用,如何从数据库中实际检索任何数据?

1 个答案:

答案 0 :(得分:1)

  • 确保您拥有互联网连接权限

  • 如果您没有指定路径的安全规则,Firebase会自动拒绝访问,因此,如果您没有使用安全规则从用户那里读取数据,则会失败

{   “规则”:{     “.read”:是的,     “.write”:是的   } }