Библиотека подкачки: источник данных не стал недействительным после вызова BoundaryCallback.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Библиотека подкачки: источник данных не стал недействительным после вызова BoundaryCallback.

Сообщение Anonymous »

В данном PagingWithNetworkSample:

Код: Выделить всё

@Query("SELECT * FROM posts WHERE subreddit = :subreddit ORDER BY indexInResponse ASC")
fun postsBySubreddit(subreddit : String) : DataSource.Factory
Здесь они используют LimitOffsetDataSource расширяет TiledDataSource в качестве поставщика,
он ​​станет недействительным при обновлении определенных таблиц :

Код: Выделить всё

mObserver = new InvalidationTracker.Observer(tables) {
@Override
public void onInvalidated(@NonNull Set tables) {
invalidate();
}
};
db.getInvalidationTracker().addWeakObserver(mObserver);
Но в моем случае:

Код: Выделить всё

class StatusDataSource() : PageKeyedDataSource() {

// additional code, not my expected
init {
db.invalidationTracker.addObserver(object : InvalidationTracker.Observer("statuses") {
override fun onInvalidated(tables: MutableSet) {
invalidate()
}
})
}

override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback) {
val data = dao.loadInitial(path, params.requestedLoadSize)
if (data.isEmpty()) {
callback.onResult(data, null, null)
} else {
callback.onResult(data, null, data.last().id)
}
}

// additional code, not my expected
override fun isInvalid(): Boolean {
db.invalidationTracker.refreshVersionsAsync()
return super.isInvalid()
}
}
Я создал класс, расширяющий PageKeyedDataSource, но все идет не так, как ожидалось: если в комнате закончились данные, сначала загрузите () вернет EMPTY, затем будет запущен BoudaryCallback для получения данных с сервера:

Код: Выделить всё

@MainThread
override fun onZeroItemsLoaded() {
helper.runIfNotRunning(PagingRequestHelper.RequestType.INITIAL) {
webservice.fetch_from_path(path = path, count = networkPageSize, id = uniqueId).enqueue(createWebserviceCallback(it))
}
}
НО после того, как я вставил элементы в базу данных, StatusDataSource не стал недействительным.
Нужно ли добавлять приведенный выше дополнительный код, чтобы просмотреть таблицу «статусы» и сделать источник данных недействительным?
Но это НЕ эффективный способ… и что еще хуже, когда загруженные данные, recyclerView не может сохраняться в своей позиции прокрутки (внизу), но прокручивается до некоторой позиции. Судя по всему, этот метод аннулирования не может работать должным образом с pagedList

Подробнее здесь: https://stackoverflow.com/questions/484 ... lback-call
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»