我使用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);
答案 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);
}
}