【发布时间】:2021-01-27 20:33:35
【问题描述】:
我收到以下错误
我正在使用 Android 架构组件并尝试从 LiveData 实例化视图模型和观察数据。但我卡在这里请帮我解决这个问题:
Attempt to invoke virtual method 'void android.arch.lifecycle.LiveData.observe(android.arch.lifecycle.LifecycleOwner, android.arch.lifecycle.Observer)' on a null object reference
我的片段是这样的: 在调用 getCompany() 方法时,我正在获取和 NullPoint 异常错误
public class CompanyFragment extends LifecycleFragment {
private CompanyViewModel companyViewModel;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
companyViewModel = ViewModelProviders.of(this).get(CompanyViewModel.class);
companyViewModel.initData();
companyViewModel.getCompany().observe(this, new Observer<CompanyEntity>() {
@Override
public void onChanged(@Nullable CompanyEntity companyEntity) {
}
});
}
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_company, container, false);
}
}
我的 ViewModel 类是这样的:
public class CompanyViewModel extends ViewModel {
private LiveData<CompanyEntity> companyEntityLiveData;
private CompanyRepository companyRepo;
public CompanyViewModel() {}
public CompanyViewModel(CompanyRepository companyRepo){
this.companyRepo = companyRepo;
}
public void initData(){
companyEntityLiveData = companyRepo.getCompany();
}
public LiveData<CompanyEntity> getCompany() {
return companyEntityLiveData;
}
}
错误出现在这一行:
companyViewModel.getCompany().observe(this, new Observer<CompanyEntity>() {
@Override
public void onChanged(@Nullable CompanyEntity companyEntity) {
}
});
这是我的 CompanyRepository 类:
public class CompanyRepository {
private WebService webService;
public CompanyRepository(){
}
public LiveData<CompanyEntity> getCompany() {
final MutableLiveData<CompanyEntity> data = new MutableLiveData<>();
webService.getCompany().enqueue(new Callback<CompanyEntity>() {
@Override
public void onResponse(Call<CompanyEntity> call, Response<CompanyEntity> response) {
data.setValue(response.body());
}
@Override
public void onFailure(Call<CompanyEntity> call, Throwable t) {
}
});
return data;
}
}
【问题讨论】:
-
companyRepo.getCompany()显然返回null。 -
这是我的 CompanyRepository 类,它使用 Retrofit 进行 REST 调用并返回公司数据的 liost。
-
如何修复它!你能帮帮我吗?
-
“你能帮帮我吗?” -- 我们没有
companyRepo.getCompany()的代码,因此不知道为什么它会返回null。您可能希望编辑您的问题并将代码发布到CompanyRepository。 -
已编辑问题,请立即查看。