首页 > 解决方案 > 在 LoadInitial 回调之前调用 LiveData 上的观察者

问题描述

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

数据正常返回。但我注意到我的视图模型中的观察者,更准确地说是在我的 PageKeyedDataSource 中的 LoadIinitial 回调之前调用我的 LiveData。这使得传递给适配器的列表为空。为什么在我的回调之前调用观察者?

视图模型:

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();
                    }
                }
            }

标签: observersandroid-livedataandroid-viewmodel

解决方案


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


推荐阅读