假设我有一个firebase数据库位置,/foo,它下面现在有五个孩子。我希望在接下来的几分钟里会有更多的孩子加入。我在这个数据库引用上有一个子事件监听器,当我按预期添加监听器时,会立即接到5个回onChildAdded()的调用。
只要我的Android应用程序正在运行来处理新的孩子,我就要让我的听众保持下去,但就目前而言,比如说,在应用程序启动时,我真的很感兴趣,当我得到了现有的五个孩子的最后一个。
我该怎么做?
我不想添加ValueEventListenerChildEventListener,因为这只会在数据传输时增加一倍。感觉应该在api中的某个地方有一个Task可以在完成时从中获取回调,但我找不到它。

最佳答案

我现在已经使用了一个延迟处理程序,不过我很乐意接受一个更好的答案。

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

}

关于java - 我现在如何知道最后一次调用ChildEventListener.onChildAdded()的时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41386940/

10-12 04:39
查看更多