这是我在 android 应用程序中使用时间戳对 firebase 数据的简单查询
Query recentStaticJobQuery = reference.child(AppConstants.WORKINDIA_JOBS)
.child(AppConstants.WORKINDIA_STATIC_JOBS)
.orderByChild(AppConstants.TIMESTAMP)
.startAt(lastStaticJobSyncTime);
recentStaticJobQuery.addListenerForSingleValueEvent
(staticJobDownloadListener);
ValueEventListener staticJobDownloadListener = new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
Log.i("Firebase", "Called")
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.i("Firebase", "onCancelled")
}
};
如何避免 onDataChange 在 android Firebase 中被调用两次?
最佳答案
有两种情况可能会发生这种情况:
onDataChange
在您启用离线持久性的情况下被调用两次。一次使用过时的离线值,一次使用更新后的值,以防它发生变化。onDataChange
会被多次调用,以防您没有正确删除监听器并且每次打开它时都会在您的 Activity 中创建一个新的监听器实例。
方案 2 很容易修复。您可以维护您的 firebase 引用和监听器的本地引用,而不是您可以在 Activity 的 onDestroy
中执行 ref.removeListener(listener)
。情况 2 很难解决,您有 2 种可能的补救措施:
- 如果您始终需要更新的最新值,请禁用离线持久性。
- 执行
runnable.postDelayed(callbackRunnable, 3000);
以等待最新值 3 秒,然后再更新 View 或您想要更新的任何内容。
关于android - onDataChange 在 android Firebase 中被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39304670/