我是第一次创建Android应用,我有一个简单的Realtime Firebase数据库,里面有几条记录。我有以下代码;
public void onStart() {
super.onStart();
// Read from the database
databaseMatches.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot matchSnapshot : dataSnapshot.getChildren()) {
matches match = matchSnapshot.getValue(matches.class);
matchesList.add(match);
}
matchList adapter = new matchList (getActivity(), matchesList);
listViewMatch.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
如果我在databaseMatches.addValueEventListener上放置一个断点(new ValueEventListener(){它告诉我已经设置了数据库连接并返回了正确的对象(在我的视图中)。
我所面临的挑战是公共空虚onDataChange和onCancelled的破发点。我迷失在这里,不知道下一步可能是什么,因为它似乎正在连接,但我无法检索记录。
我在片段而不是活动中这样做。任何帮助表示赞赏。
答案 0 :(得分:0)
检测连接状态
它对您的应用程序了解何时在线或离线非常有用。 Firebase实时数据库在/.info/connected处提供了一个特殊位置,每当Firebase实时数据库客户端的连接状态发生变化时,该位置都会更新。这是一个例子:如果你不确定。
https://firebase.google.com/docs/database/android/offline-capabilities#section-connection-state
DatabaseReference connectedRef =
FirebaseDatabase.getInstance().getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
boolean connected = snapshot.getValue(Boolean.class);
if (connected) {
System.out.println("connected");
} else {
System.out.println("not connected");
}
}
@Override
public void onCancelled(DatabaseError error) {
System.err.println("Listener was cancelled");
}
Firebase还异步加载和同步数据 见Setting Singleton property value in Firebase Listener
答案 1 :(得分:0)
感谢。
第二天早上,当我运行完全相同的代码时,一定有一些奇怪的缓存问题,没问题。从那以后我就没有问题了。