我试图使用Firestore作为后端来实现新的Android分页库。我创建了一个扩展MyDataSource
的类PageKeyedDataSource<Integer, MyObject>
,在其中实现了三个功能:
例如,功能之一是:
@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()
,但效果很好。我对获取实时更新的要求。
如何避免此错误?
答案 0 :(得分:0)
不幸的是,您不能同时拥有实时更新和分页。您必须选择一个。这是分页库的限制,它需要在内部管理结果页。