【发布时间】:2016-09-24 21:00:37
【问题描述】:
我正在使用 Firebase 数据库并从中检索数据。当我的数据库有数据时,addChildEventListener 运行良好,但是当我的数据库没有数据时,addChildEventListener 不起作用。贝娄,这是我的代码:
mDatabase = FirebaseDatabase.getInstance().getReference().child("music");
public void getListMusicFromFirebase() {
mDatabase.addChildEventListener(this);
}
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
updateMusic(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
updateMusic(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
updateMusic(dataSnapshot);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
private void updateMusic(DataSnapshot dataSnapshot) {
mListMusic.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
String title = snapshot.getValue(Music.class).getTitle();
String artist = snapshot.getValue(Music.class).getArtist();
String year = snapshot.getValue(Music.class).getYear();
String duration = snapshot.getValue(Music.class).getDuration();
String uri = snapshot.getValue(Music.class).getUri();
Music music = new Music(title, artist, year, duration, uri);
mListMusic.add(music);
}
if (mListMusic.size() > 0) {
bindingListMusic();
return;
}
mBinding.tvDataEmpty.setText("No data");
mDialog.dismiss();
}
我检查了我的清单。如果它的大小大于0,我会将它绑定到recyclerview,相反,我会通知它没有数据,它在有数据时工作良好但是当我从Firebase数据库中删除所有数据时,我的代码无法执行updateMusic( ) 方法。
请帮忙。
【问题讨论】:
-
正如 Nishant 所说:子事件只会触发如果子存在/存在。以“零状态”启动 UI 是最简单的方法,因此从一开始就显示“未找到数据”,然后在数据进入时将其删除。但如果您想明确处理无数据情况,您可以附加一个额外的
ValueEvntListener并使用它来检测何时没有孩子。见stackoverflow.com/questions/39671076/…
标签: android firebase firebase-realtime-database