Android ViewModel никогда не будет вызван - PullRequest
0 голосов
/ 24 октября 2019

У меня следующий код:

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);
            }
        });
    }
}

и метод MainActivity onCreate:

    ViewModelDrivers model = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(ViewModelDrivers.class);

        model.getDrivers().observe(this, items -> {
//here never gets called. Why?
});

Я не использовал ViewModelProviders, поскольку он устарел. Я никогда не получал результат в наблюдении () метод. Кроме того, drivers.setValue(d); устанавливается

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Измените drivers.setValue() на drivers.postValue(, и если это поможет, вы должны изменить свой код, например Suraj Vaishnav , вызывая loadDrivers после подписки на наблюдателя.

1 голос
/ 24 октября 2019

Может быть, ваш drivers.setValue(d); вызывался раньше return drivers; Так что удалите loadDrivers(); из getDrivers() метода, например:

 public LiveData<List<DriverDetailsModel>> getDrivers() {
        if (drivers == null) {
            drivers = new MutableLiveData<>();
        }
        return drivers;
    }

И вызовите loadDrivers() из после установки наблюдателя, например так:

model.getDrivers().observe(this, items -> {
//here never gets called. Why?
});
loadDrivers(); //here call loadDrivers();
...