【问题标题】:Android paging library + Firestore crashes with IllegalStateExceptionAndroid 分页库 + Firestore 因 IllegalStateException 而崩溃
【发布时间】:2019-02-13 12:48:47
【问题描述】:

我尝试使用 Firestore 作为我的后端来实现新的 Android 分页库。我创建了一个扩展PageKeyedDataSource<Integer, MyObject> 的类MyDataSource,我在其中实现了三个功能:

  • loadInitial
  • 加载之前
  • 加载后

例如其中一个功能是这样的:

@Override
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull final LoadInitialCallback<Integer, MyObject> callback) {
    query.addSnapshotListener((snapshots, exception) -> {
        if (exception != null) return;

        List<MyObject> list = new ArrayList<>();
        for(DocumentSnapshot document : snapshots.getDocuments()){
            list.add(document.toObject(MyObject.class));
        }
        callback.onResult(list, null, 1); //Error
    });
}

一切正常,直到数据库中的某些内容发生更改、调用侦听器并且应用程序崩溃:

java.lang.IllegalStateException: callback.onResult 已调用,无法再次调用。

我尝试使用get(),效果很好。我要求获得实时更新。

如何避免这个错误?

【问题讨论】:

  • 我认为不可能在分页的同时获得实时更新。正如错误消息所说,onResult 不能被第二次调用,这正是当您添加一个侦听器时发生的事情,该侦听器会随着查询的每次更改而被调用。
  • @DougStevenson 感谢您的回答。所以你基本上说 Firestore 不能实时使用新的 Android 分页库,对吧?当只分页数据而没有实时功能时,一切都很完美。
  • Firestore 可以很好地处理分页。您只是无法在使用分页库的同时获得实时更新。这是分页库的限制。
  • @DougStevenson 非常感谢您的澄清。这就是我一直在寻找的答案。请将其添加为答案,以便我接受。从字面上拯救了我的一天。

标签: android firebase google-cloud-firestore android-jetpack android-paging


【解决方案1】:

很遗憾,您不能同时进行实时更新和分页。你必须选择其中之一。这是分页库的一个限制,它需要在内部管理结果页面。

【讨论】:

  • 再次感谢!!
  • Firebase 有很多限制。 “实时更新和分页不能同时使用……”这是非常必要的功能。尽管 Firebase 中还没有许多其他基本和必要的功能。
  • @Pooja 如果您对 Firebase 团队有任何反馈,请直接将其发送给 Firebase 支持。这不是 Stack Overflow 可以解决的问题,并且否决这个答案也无济于事。 support.google.com/firebase/contact/support
猜你喜欢
  • 1970-01-01
  • 2014-10-30
  • 2016-02-07
  • 2016-04-23
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
相关资源
最近更新 更多