Обозреватель LiveData вызывается до обратного вызова LoadInitial - PullRequest
0 голосов
/ 07 января 2019

В проекте, который я работаю, я использую библиотеку страниц и модернизацию. Я делаю это впервые.

Данные возвращаются нормально. Но я заметил, что наблюдатель в моей модели представления, точнее в моих LiveData, вызывается перед обратным вызовом LoadIinitial в моем PageKeyedDataSource. Это делает список переданным адаптеру пустым. Почему Observer вызывается перед моим обратным вызовом?

ViewModel:

public GameDataViewModel(){
        GameResponseDataSourceFactory gameResponseViewModelFactory = new GameResponseDataSourceFactory();
        gameListLiveData = gameResponseViewModelFactory.getGameResponseMutableLiveData();

        PagedList.Config config = (new PagedList.Config.Builder())
                .setEnablePlaceholders(false)
                .setPageSize(20)
                .build();

        gameList = new LivePagedListBuilder(gameResponseViewModelFactory, config).build();
    }

Это когда я звоню в моей деятельности:

final GameListAdapter gameListAdapter = new GameListAdapter();

        GameDataViewModel gameDataViewModel = ViewModelProvider.AndroidViewModelFactory.
                getInstance(this.getApplication()).create(GameDataViewModel.class);

        gameDataViewModel.gameList.observe(this, new Observer<PagedList<GameResponse>>() {
            @Override
            public void onChanged(@Nullable PagedList<GameResponse> gameResponses) {
                gameListAdapter.submitList(gameResponses);
            }
        });

Мой звонок на источник данных:

Call<GameListResponse> call = HttpConnectionHandler.getInstance().getTwitchGameApi().getTopGames(CLIENT_ID,  20, null,  null);
        call.enqueue(new Callback<GameListResponse>() {
            @Override
            public void onResponse(Call<GameListResponse> call, Response<GameListResponse> response) {
                //initialLoading.postValue(DataState.SUCCESS);
                //networkState.postValue(DataState.SUCCESS);
                if(response.code() == 200) {
                    GameListResponse gameListResponse = response.body();
                    callback.onResult(gameListResponse.getGamesList(), 0, gameListResponse.getGamesList().size(), null, gameListResponse.getCursor());
                }
                else{
                    try {
                        Log.e("ERROR", response.errorBody().string());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

1 Ответ

0 голосов
/ 07 января 2019

За мою БОЛЬШУЮ глупость я переопределил getItemCount и вернул ноль. Сняв его, все отлично работает.

...