Android Firebase读取数据问题

时间:2018-02-24 03:10:14

标签: android android-studio android-fragments

我是第一次创建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的破发点。我迷失在这里,不知道下一步可能是什么,因为它似乎正在连接,但我无法检索记录。

我在片段而不是活动中这样做。任何帮助表示赞赏。

2 个答案:

答案 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)

感谢。

第二天早上,当我运行完全相同的代码时,一定有一些奇怪的缓存问题,没问题。从那以后我就没有问题了。