我正在尝试从公共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
}
}
}
}
如果这不起作用,如何从数据库中实际检索任何数据?
答案 0 :(得分:1)
确保您拥有互联网连接权限
如果您没有指定路径的安全规则,Firebase会自动拒绝访问,因此,如果您没有使用安全规则从用户那里读取数据,则会失败
{ “规则”:{ “.read”:是的, “.write”:是的 } }