Мое приложение использует библиотеку архитектурных компонентов Android и отображает список элементов получен из API-интерфейса REST с разбивкой на страницы с эффектом бесконечной прокрутки.
Я пытаюсь использовать библиотеку подкачки в сочетании с NetworkBoundResource, чтобы при прокрутке списка , следующие элементы извлекаются из базы данных и отображаются, если они существуют, и одновременно вызывается API для обновления элементов в БД.
Я не смог найти ни одного примера сосуществования этих двух паттернов.
Вот ДАО:
@Query("SELECT * FROM items ORDER BY id DESC")
LivePagedListProvider<Integer,MyItem> loadListPaginated();
Вот моя реализация NetworkBoundResource
:
public class PagedListNetworkBoundResource extends NetworkBoundResource<PagedList<MyItem>, List<MyItem>> {
@Override
protected void saveCallResult(@NonNull List<MyItem> items) {
// Inserting new items into DB
dao.insertAll(items);
}
@Override
protected boolean shouldFetch(@Nullable PagedList<MyItem> data) {
return true;
}
@NonNull
@Override
protected LiveData<PagedList<MyItem>> loadFromDb() {
return Transformations.switchMap(dao.loadListPaginated().create(INITIAL_LOAD_KEY, PAGE_SIZE),
new Function<PagedList<MyItem>, LiveData<List<MyItem>>>() {
@Override
public LiveData<PagedList<MyItem>> apply(final PagedList<MyItem> input) {
// Here I must load nested objects, attach them,
// and return the fully loaded items
}
});
}
@NonNull
@Override
protected LiveData<ApiResponse<List<MyItem>>> createCall() {
// I don't get the current paged list offset to perform a call to the API
return ...;
}
}