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 订阅观察者后。
我有以下代码:
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 订阅观察者后。