获取 LiveData 对象的更有效方法
More efficient way getting LiveData object
我的 StorageViewModel 中有一个 LiveData<List<Storage>>
,我想在 activity 中获取此列表以便对其执行 get(id)
。
虽然到目前为止我只能实现一种方法来获取 this List<Storage>
而不是 null
,但我觉得这种方法效率不高。
为什么我的第二种方法不起作用?我是不是忘记声明最终结果了?
编辑: 我的第二个方法检索来自 ROOM 存储库异步调用的对象,我需要某种回调来获得正确的实例。话又说回来,也许这种方式可以更有效。
视图模型Class
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 中的工作方法Class (storages != null)
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 中的方法无效 Class(存储 == null)
void setActivityElements()
{
int id = (int) getIntent().getExtras().get("storageID");
List<Storage> storages = storageVM.getStorages().getValue(); // storages == null
Storage storage = storages.get(id);
}
您发布的工作方法是正确的。您需要对可观察变量的可空性执行检查。
您必须从 INSIDE ViewModel
class 更新列表。这将触发你在Activity
class中注册的观察者并执行你声明的方法体。
我的 StorageViewModel 中有一个 LiveData<List<Storage>>
,我想在 activity 中获取此列表以便对其执行 get(id)
。
虽然到目前为止我只能实现一种方法来获取 this List<Storage>
而不是 null
,但我觉得这种方法效率不高。
为什么我的第二种方法不起作用?我是不是忘记声明最终结果了?
编辑: 我的第二个方法检索来自 ROOM 存储库异步调用的对象,我需要某种回调来获得正确的实例。话又说回来,也许这种方式可以更有效。
视图模型Class
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 中的工作方法Class (storages != null)
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 中的方法无效 Class(存储 == null)
void setActivityElements()
{
int id = (int) getIntent().getExtras().get("storageID");
List<Storage> storages = storageVM.getStorages().getValue(); // storages == null
Storage storage = storages.get(id);
}
您发布的工作方法是正确的。您需要对可观察变量的可空性执行检查。
您必须从 INSIDE ViewModel
class 更新列表。这将触发你在Activity
class中注册的观察者并执行你声明的方法体。