У меня есть LiveData<List<Storage>>
в моей StorageViewModel, я хочу получить этот список в действии, чтобы выполнить get(id)
над ним.
Хотя до сих пор я могу достичь только одного способа получить это List<Storage>
без того, чтобы оно было null
, за исключением того, что этот способ не кажется мне эффективным.
Почему мой второй метод не работает? Я забыл объявить что-то окончательное?
РЕДАКТИРОВАТЬ: мой второй метод получает объект, поступающий из асинхронного вызова в хранилище ROOM, мне требуется какой-то обратный вызов, чтобы получить правильный экземпляр, как кажется. Опять же, возможно, путь мог бы быть более эффективным.
Класс ViewModel
public class StorageViewModel extends AndroidViewModel
{
StorageRepository _repository;
LiveData<List<Storage>> _storages;
public ObservableField<String> storageName = new ObservableField<>("");
public ObservableField<String> storageLoc = new ObservableField<>("");
public StorageViewModel(Application application)
{
super(application);
_repository = new StorageRepository(application);
_storages = _repository.getAllStorages();
}
public LiveData<List<Storage>> getStorages()
{
return _storages;
}
public void addStorage(String storageName, String storageLocation)
{
_repository.insert(new Storage(storageName, storageLocation));
}
}
Метод работы в классе StorageActivity (хранилища! = Ноль)
void setActivityElements()
{
int id = (int) getIntent().getExtras().get("storageID");
storageVM.getStorages().observe(this, new Observer<List<Storage>>()
{
@Override
public void onChanged(@Nullable final List<Storage> storages)
{
Storage storage = storages.get(id); // storages != null
}
});
}
Не работает метод в классе StorageActivity (хранилища == ноль)
void setActivityElements()
{
int id = (int) getIntent().getExtras().get("storageID");
List<Storage> storages = storageVM.getStorages().getValue(); // storages == null
Storage storage = storages.get(id);
}