Я пытаюсь реализовать новую библиотеку подкачки Android, используя Firestore в качестве моего бэкэнда.Я создал класс MyDataSource
, который расширяет PageKeyedDataSource<Integer, MyObject>
, где я реализую три функции:
- loadInitial
- loadBefore
- loadAfter
Например, одна из функций такова:
@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()
, и он работал нормально.Мои требования для получения обновлений в реальном времени.
Как избежать этой ошибки?