Pra*_*ool 6 android android-fragments
Im getting the following error
Im using Android architecture components and tried to instantiate viewmodel and Observe data from LiveData. But im stuck here please help me solve this issue :
Attempt to invoke virtual method 'void android.arch.lifecycle.LiveData.observe(android.arch.lifecycle.LifecycleOwner, android.arch.lifecycle.Observer)' on a null object reference
Run Code Online (Sandbox Code Playgroud)
My Fragment is this : While calling getCompany() method im getting and NullPoint Exception Error
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);
}
}
Run Code Online (Sandbox Code Playgroud)
My ViewModel class is this :
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Error is at this line :
companyViewModel.getCompany().observe(this, new Observer<CompanyEntity>() {
@Override
public void onChanged(@Nullable CompanyEntity companyEntity) {
}
});
Run Code Online (Sandbox Code Playgroud)
This is my CompanyRepository class:
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;
}
Run Code Online (Sandbox Code Playgroud)
}
您必须观察 LiveData 的同一个实例。在您的CompanyRepository类中,您每次访问公司时都会创建一个新的 LiveData 实例,这意味着您的活动随后会观察一个旧实例。
getCompany 方法应该更改为始终返回 LiveData 的相同实例。此外,您应该将 setValue() 更改为 postValue() 因为您正在尝试更新后台线程上的值。
final MutableLiveData<CompanyEntity> data = new MutableLiveData<>();
public LiveData<CompanyEntity> getCompany() {
webService.getCompany().enqueue(new Callback<CompanyEntity>() {
@Override
public void onResponse(Call<CompanyEntity> call, Response<CompanyEntity> response) {
data.postValue(response.body());
}
@Override
public void onFailure(Call<CompanyEntity> call, Throwable t) {
}
});
return data;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9616 次 |
| 最近记录: |