当我试图从中获取价值时,我的LiveData <>返回null?

MainActivity

**

Here is my error: //Attempt to invoke virtual method 'java.util.List com.xllnc.mvvmexample.entity.ApiResponse.getIssues()' on a null object reference

**

mViewModel = ViewModelProviders.of(this).get(ListIssueViewModel.class);
mViewModel.getApiResponse().observe(this, apiResponse -> mAdapter.addIssues(apiResponse.getIssues()));
mViewModel.loadIssues("square", "retrofit");

ViewModel

public class ListIssueViewModel extends ViewModel {

    private MutableLiveData<ApiResponse> mApiResponse;
    private IssueRepository mIssueRepository;

    public ListIssueViewModel(){
        mApiResponse = new MediatorLiveData<>();
        mIssueRepository = new IssueRepositoryImpl();
    }

    public LiveData<ApiResponse> getApiResponse(){
        return mApiResponse;
    }

    public void loadIssues(String user, String repo){
        ApiResponse response = mIssueRepository.getIssues(user, repo).getValue();
        mApiResponse.setValue(response);
    }
}

Repository

public class IssueRepositoryImpl implements IssueRepository {
    public static final String BASE_URL = "https://api.github.com/";
    private GitHubApiService mApiService;

    public IssueRepositoryImpl(){
        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(BASE_URL)
                .build();
        mApiService = retrofit.create(GitHubApiService.class);
    }

public LiveData<ApiResponse> getIssues(String owner, String repo) {
        final MutableLiveData<ApiResponse> liveData = new MutableLiveData<>();
        Call<List<Issue>> call = mApiService.getIssues(owner, repo);
        call.enqueue(new Callback<List<Issue>>() {
            @Override
            public void onResponse(Call<List<Issue>> call, Response<List<Issue>> response) {
                liveData.setValue(new ApiResponse(response.body()));
            }

            @Override
            public void onFailure(Call<List<Issue>> call, Throwable t) {
                liveData.setValue(new ApiResponse(t));
            }
        });
        return liveData;
    }
}
分析解答

当您尝试同步获取response时,您的问题是关于Rest api或改装调用的异步性质。

 public void loadIssues(String user, String repo){
        ApiResponse response = mIssueRepository.getIssues(user, repo).getValue();
        mApiResponse.setValue(response);
    }

设置ApiResponse,即使它没有从服务中检索。

使用Transformations.switchMap获取response并正确观察它。