Android ViewModel 观察者永远不会被调用

Android ViewModel observer never gets called

我有以下代码:

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

以及 onCreate 方法上的 MainActivity:

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

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

我没有使用 ViewModelProviders,因为它已被弃用。我从未在 observe() 方法中收到结果。此外 drivers.setValue(d); 设置

也许你的 drivers.setValue(d);return drivers; 之前打过电话 所以从 getDrivers() 方法中删除 loadDrivers();,像这样:

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

drivers.setValue() 更改为 drivers.postValue( 如果这有帮助,那么您应该更改您的代码,例如 Suraj Vaishnav 定义,调用 loadDrivers 订阅观察者后。