Reputation: 1612
I am having the following code:
public class ViewModelDrivers extends ViewModel {
private MutableLiveData<List<DriverDetailsModel>> drivers;
public LiveData<List<DriverDetailsModel>> getDrivers() {
if (drivers == null) {
drivers = new MutableLiveData<>();
loadDrivers();
}
return drivers;
}
private void loadDrivers() {
CloudFactory.getInstance().getAllServerDrivers(PreferenceUtils.getInstance().getDeviceId(), new IServerAllTrucksCallback() {
@Override
public void onAllTrucks(List<DriverDetailsModel> d) {
drivers.setValue(d);
}
});
}
}
And the MainActivity on onCreate method:
ViewModelDrivers model = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(ViewModelDrivers.class);
model.getDrivers().observe(this, items -> {
//here never gets called. Why?
});
I didnt used ViewModelProviders since is deprecated. I never received a result in observe() method. Moreover drivers.setValue(d);
gets set
Upvotes: 0
Views: 303
Reputation: 684
Change drivers.setValue()
to drivers.postValue(
and if this helps, then you should change your code like Suraj Vaishnav defined, calling loadDrivers after subscribing to observer.
Upvotes: 1
Reputation: 8305
Maybe your drivers.setValue(d);
called before return drivers;
So remove loadDrivers();
from getDrivers()
method, like this:
public LiveData<List<DriverDetailsModel>> getDrivers() {
if (drivers == null) {
drivers = new MutableLiveData<>();
}
return drivers;
}
And call loadDrivers()
from after setting observer, like this:
model.getDrivers().observe(this, items -> {
//here never gets called. Why?
});
loadDrivers(); //here call loadDrivers();
Upvotes: 1