【问题标题】:Firebase database not working with addChildEventListenerFirebase 数据库不适用于 addChildEventListener
【发布时间】: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


【解决方案1】:

要启动您的侦听器,您的 firebase 数据库中应该有所需的数据。 AddChildEvent 侦听器需要一个预定义的父级,您将在应用启动时(或任何时候)附加它。如果没有父母,则永远不会附加或启动侦听器。

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-10-31
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多