Firebaseデータベースを使用していて、そこからデータを取得しています。データベースにデータがある場合、addChildEventListenerはうまく動作しますが、データベースにデータがない場合は、addChildEventListenerが機能しません。ベロー、これは私のコードです:Firebaseデータベースが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'を添付し、それが子供がいないときを検出するために使用します。 http://stackoverflow.com/questions/39671076/firebase-childeventlistener-return-value-when-path-does-not-existを参照してください。 –