在LoadInitial回调之前调用LiveData上的观察者

时间:2019-01-07 11:45:22

标签: observers android-livedata android-viewmodel

在我正在工作的项目中,我正在使用分页库和改造。这是我第一次这样做。

正常返回数据。但是我注意到我的视图模型中的观察者,更确切地说,是在我的PageKeyedDataSource中的LoadIinitial回调之前调用了LiveData。这使传递给适配器的列表为空。 为什么在我的回调之前调用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);
            }
        });

我对DataSource的呼叫

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 :(得分:0)

对于我最大的愚蠢,我覆盖了getItemCount并返回零。 删除它,一切正常。