android – 获取LiveData对象的更有效方法

我有一个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类中的工作方法(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类中的不工作方法(storages == 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类更新列表.这将触发您在Activity类中注册的观察者并执行您声明的方法体.

上一篇:使用java rx.Observable进行并行API调用


下一篇:用Nginx+Redis实现session共享的均衡负载