在Android

时间:2016-06-16 08:53:51

标签: android firebase firebase-realtime-database

我使用OnChildAdded事件从Android上获取数据库中的所有数据。

第一次和很久以后,它运作良好。 但有些事情,onChildAdded不再是为老孩子打电话了。 再次卸载并安装应用程序,使其再次运行。

我检查了权限并添加了活动。 我不知道什么是错的,需要做些什么来解决它。

这段代码,我用于init

    prayersRef = database.child("prayers");

    Log.w(TAG, "FireBaseDatabaseManager");

    prayersListener = new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
            Prayer prayer = dataSnapshot.getValue(Prayer.class);
            prayer.uid = dataSnapshot.getKey();
            Log.w(TAG, "onChildAdded:" + prayer.uid);

            if (delegate != null) {
                delegate.OnPrayerAdded(prayer);
            }
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
            Log.w(TAG, "onChildChanged:" + dataSnapshot.getKey());
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            Log.w(TAG, "onChildRemoved:" + dataSnapshot.getKey());
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
            Log.w(TAG, "onChildMoved:" + dataSnapshot.getKey());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.w(TAG, "onCancelled", databaseError.toException());
        }
    };

然后我在这里添加事件

    Log.i(TAG, "Add Child Event Listener");
    prayersRef.addChildEventListener(prayersListener);

1 个答案:

答案 0 :(得分:0)

OnChildAdded事件用于刷新数据。尝试使用ListenerForSingleValueEvent检索数据,然后在onDataChange中,您可以将所有下载的项目放在列表:)中,如:

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
     List<Model> models = new ArrayList<>();
     for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
         Model model = snapshot.getValue(Model.class);
         models.add(model);
     }    
}