【发布时间】:2020-06-28 14:06:17
【问题描述】:
我只是想学习 mvvm,但遇到了一些问题 - 我的列表应该包含来自 API 的响应是空的。我不确定为什么会这样。这是一些代码:
MainActivity
mViewModel = new ViewModelProvider(this).get(ViewModel.class);
mViewModel.getData().observe(this, new Observer<List<Model>() {
@Override
public void onChanged(List<Model> list) {
if (data.size() > 0) {
data.clear();
}
if (list != null) {
data.addAll(list);
Log.i(TAG, "onChanged: " + data.size());
}
}
});
视图模型
private Repository mRepository;
private MutableLiveData<List<Model> liveData;
public ViewModel(@NonNull Application application) {
super(application);
mRepository = Repository.getInstance();
liveData = mRepository.getData();
}
public MutableLiveData<List<Model> getData(){
return liveData;
}
存储库
public MutableLiveData<List<Model>> getData(){
MutableLiveData<List<Model> mLiveData = new MutableLiveData<>();
mApiCall.callApi()
.enqueue(new Callback<List<Model>() {
@Override
public void onResponse(Call<List<Model> call, Response<List<Model> response) {
mLiveData.setValue(response.body());
}
@Override
public void onFailure(Call<List<Model> call, Throwable t) {
t.getMessage();
}
});
return mLiveData;
}
【问题讨论】:
-
response.body()可以返回空列表。您是否验证响应列表不为空? -
我认为您正在尝试观察 MutableLiveData,您应该在其中观察 LiveData。
-
嗯,我想是的。我正在使用 HttpLoggerInterceptor,从日志中我可以看到一切正常,我的意思是整个连接都正常。我也尝试在 LiveList 为空时返回一些日志,但我没有收到任何日志,所以我认为响应不是 null/empty
-
我敢说 MutableLiveData 没问题。我在类似的项目中使用过,一切都很好。
-
请不要破坏您的帖子。如果你不想要它,你可以删除它
标签: java android mvvm retrofit