开发者问题收集

Firebase 数据库无法与 addChildEventListener 配合使用

2016-09-24
822

我正在使用 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() 方法。

请帮忙。

1个回答

要启动您的侦听器,您应该在 Firebase 数据库中拥有所需的数据。AddChildEvent 侦听器需要一个预定义的父级,您可以在应用启动时(或任何您想要的时候)将其附加到该父级。如果没有父级,侦听器将永远不会被附加或启动。

这将导致您稍后添加父级并向其添加子级时没有响应。因此,请始终确保您添加 childEventListener 的父级已经存在并且值不为空。

希望这能有所帮助。

Nishant Dubey
2016-09-24