Search code examples
androidviewmodelobserver-pattern

Android ViewModel observer never gets called


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


Solution

  • 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.