LivePagedListBuilder не распознает новые данные в БД - PullRequest
0 голосов
/ 26 мая 2019

Я настроил Google Paging Library, следуя этому руководству: https://guides.codepath.com/android/Paging-Library-Guide

Данные извлекаются из таблицы sqlite с использованием Room.

Когда новые данные добавляются в таблицу sqlite,Наблюдатель не вызывается.Таким образом, мой просмотрщик не отображает его.Это ошибка в LivePagedListBuilder?

   PagedList.Config config = new PagedList.Config.Builder().setEnablePlaceholders(true).setPageSize(4).build();
    MessageDataSourceFactory factory = new MessageDataSourceFactory(this);
    this.messageListLiveData = new LivePagedListBuilder(factory, config).build();

    this.messageListLiveData.observe(this, new Observer<PagedList<MessageEntity>>() {
        @Override
        public void onChanged(@Nullable PagedList<MessageEntity> messageEntities) {
            adapter.submitList(messageEntities);
        }
    });

DataSourceFactory

public class MessageDataSourceFactory extends DataSource.Factory<Long, MessageEntity> {
    Context context;

    public MessageDataSourceFactory(Context context) {
        this.context = context;
    }

    @Override
    public DataSource<Long, MessageEntity> create() {
        MessageDataSource dataSource = new MessageDataSource(context);
        return dataSource;
    }
}

DataSource

public class MessageDataSource extends ItemKeyedDataSource<Long, MessageData> {
    Context context;

    public MessageDataSource(Context context) {
        this.context = context;
    }

    @NonNull
    @Override
    public Long getKey(@NonNull MessageData item) {
        return item.getIndex();
    }

    public void loadInitial(@NonNull LoadInitialParams<Long> params, @NonNull final LoadInitialCallback<MessageData> callback) {
        // DAO loads initial data
        callback.onResult(messages);
    }

    // Called repeatedly when more data needs to be set
    @Override
    public void loadAfter(@NonNull LoadParams<Long> params, @NonNull LoadCallback<MessageData> callback) {
        if(params.key == 0) {
            return;
        }

        // DAO loads more data
        callback.onResult(messages);
    }

    @Override
    public void loadBefore(@NonNull LoadParams<Long> params, @NonNull LoadCallback<MessageData> callback) {
    }
}

Альтернативой является создание запроса, который возвращает

DataSource.Factory<Integer, MessageEntity>

Но я бы хотел иметь свой собственный класс DataSource.

...