2016-09-24 60 views
0

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

請幫忙。

+0

正如Nishant所說:如果孩子存在/存在,孩子的事件只會發生。用「零狀態」開始你的用戶界面是最容易的,因此從一開始就顯示「找不到數據」,然後在數據進入時刪除它。 但是,如果你想明確處理無數據的情況,你可以附加一個額外的'ValueEvntListener'並用它來檢測何時沒有孩子。請參閱http://stackoverflow.com/questions/39671076/firebase-childeventlistener-return-value-when-path-does-not-exist –

回答

1

要啓動監聽器,您應該在Firebase數據庫中包含所需的數據。 AddChildEvent偵聽器需要一個預定義的父級,您將在應用程序啓動時將其附加到它上面(或隨時隨地)。如果沒有父母,聽衆將永遠不會被附加或啓動。

當您稍後添加父項並向其添加子項時,這將不會產生響應。因此,請始終確保添加childEventListener的父項已存在,並且該值不爲空。

希望這會有所幫助。

相關問題