2016-12-29 93 views
2

假設我有一個Firebase數據庫位置/foo,它現在有五個孩子。我預計在接下來的幾分鐘內會增加更多的孩子。我在這個數據庫引用上有一個子事件監聽器,當我按預期方式添加監聽器時,我立即收到五個回調到onChildAdded()的調用。現在我怎麼知道什麼時候最後一次調用ChildEventListener.onChildAdded()?

只要我的Android應用程序正在運行以處理新的孩子,但我現在要在應用程序啓動時保留我的聽衆,但我現在真的很感興趣,當我有最後一個現有的五個孩子。

我該怎麼做?

我不想添加ValueEventListener以及ChildEventListener,因爲這只是數據傳輸的兩倍。感覺應該在API的某處有一個Task,我可以從完成時得到一個回調,但我找不到它。

+0

也許可以使用[this?](https://www.firebase.com/docs/java-api/javadoc/com/firebase/client/DataSnapshot.html#getChildrenCount--)然後每次保存一個計數器孩子被添加。 –

+0

「......因爲這只是數據傳輸的兩倍。」你確定嗎? – cartant

回答

1

我已經結束了現在使用延遲處理程序,雖然我會很樂意接受更好的答案。

class PositionListener implements ChildEventListener { 

    private MyService service; 

    private final Handler lastChildHandler = new Handler(); 

    private final Runnable lastChildRunnable = new Runnable() { 
     @Override 
     public void run() { 
      service.onModelChanged(); 
     } 
    }; 

    @Override 
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) { 
     // Omitted: Handle this child. 

     // Push the time at which we let the service know the model has 
     // changed and redraw the view out another 20ms. This means 
     // lastChildRunnable.run() will never actually run until after 
     // the last child for a while. 
     lastChildHandler.removeCallbacks(lastChildRunnable); 
     lastChildHandler.postDelayed(lastChildRunnable, 20); 
    } 

    // Omitted: other overrides 

} 
1

我也遇到了同樣的問題。而現在這裏是我的解決方案:

我把addChildEventListeneraddValueEventListener在同一DatabaseReference。我讀了一些參考資料(我忘記了,也許有人可以發表評論),說addChildEventListener事件完成後,將會調用的addValueEventListener

不是最好的解決方案,我知道,但可以是另一種選擇。

相關問題