Android 分页库 + Firestore 因 IllegalStateException 而崩溃

Android paging library + Firestore crashes with IllegalStateException

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

例如其中一个函数是这样的:

@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 already called, cannot call again.

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

如何避免这个错误?

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