在MainActivity中,我一个接一个地调用两个方法,这是代码getAddress方法:
public class RemoteRepository {
private ApiRequest apiRequest;
private LiveData<List<AddressResponse>> allAddresses = new MutableLiveData<>();
public RemoteRepository() {
apiRequest = RetrofitRequest.getInstance().create(ApiRequest.class);
}
public LiveData<List<AddressResponse>> getAddresses() {
return allAddresses;
}
public void getAddress(double query1, double query2) {
apiRequest.getAddress(query1, query2)
.enqueue(new Callback<AddressResponse>() {
@Override
public void onResponse(Call<AddressResponse> call, Response<AddressResponse> response) {
if(response.body() != null) {
allAddresses.getValue().add(response.body());
}
}
@Override
public void onFailure(Call<AddressResponse> call, Throwable t) {
}
});
}
}不幸的是,我得到了以下错误:java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference。
有没有办法将每次调用的数据添加到LiveData<List<AddressResponse>> allAddresses?
发布于 2020-05-13 05:59:38
我相信这就是你需要改变的
allAddresses.getValue().add(response.body());要这样做:
allAddresses.postValue(response.body())发布于 2020-05-13 06:11:06
首先,最好在getter方法中创建LiveData的实例,而不是在类的顶部创建,如下所示:
Public LiveData<List<ResponseAddress> getAddress(){
if(allAddress == Null)
allAddress = new MutableLiveData ();
return allAddress;
}然后确保您的响应正文不为空:
if(response.body() != null ){
// Replacement Bellow
}在if语句体中,只需替换:
allAddresses.getValue().add(response.body());有了这个:
allAddresses.setValue(response.body());发布于 2020-05-13 06:32:12
如果想要在值发生变化时向应用程序的主线程发布或添加任务,则使用:
allAddresses.postValue(response.body())而setValue()方法用于设置更改的值,即更改值将被分派给应用程序的活动观察者:
allAddresses.setValue(response.body()) https://stackoverflow.com/questions/61762624
复制相似问题