gpt4 book ai didi

android - onDataChange 在 android Firebase 中被调用两次

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:02 24 4
gpt4 key购买 nike

这是我在 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 中被调用两次?

最佳答案

有两种情况可能会发生这种情况:

  1. onDataChange 在您启用离线持久性的情况下被调用两次。一次使用过时的离线值,一次使用更新后的值,以防它发生变化。

  2. onDataChange 会被多次调用,以防您没有正确删除监听器并且每次打开它时都会在您的 Activity 中创建一个新的监听器实例。

方案 2 很容易修复。您可以维护您的 firebase 引用和监听器的本地引用,而不是您可以在 Activity 的 onDestroy 中执行 ref.removeListener(listener)。情况 2 很难解决,您有 2 种可能的补救措施:

  1. 如果您始终需要更新的最新值,请禁用离线持久性。
  2. 执行 runnable.postDelayed(callbackRunnable, 3000); 以等待最新值 3 秒,然后再更新 View 或您想要更新的任何内容。

关于android - onDataChange 在 android Firebase 中被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39304670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com