相关疑难解决方法(0)

从ViewModel观察LiveData

我有一个单独的类来处理数据提取(特别是Firebase),我通常从它返回LiveData对象并异步更新它们.现在我想将返回的数据存储在ViewModel中,但问题是为了获得所述值,我需要观察从我的数据获取类返回的LiveData对象.observe方法需要一个LifecycleOwner对象作为第一个参数,但我显然没有在我的ViewModel内部,我知道我不应该保持对ViewModel内部的Activity/Fragment的引用.我该怎么办?

android android-livedata android-viewmodel android-architecture-components

55
推荐指数
5
解决办法
3万
查看次数

android livedata进行顺序调用

我正在使用Retrofit,实时数据.我的项目有一种情况,我必须进行网络调用.如果任何一个失败,它应该返回错误.

目前我有两个实时数据观察员来完成工作,这不是一个好方法,所以我想知道更好的方法或示例代码来处理这样的要求.

注意:我没有使用Rxjava.

查看代码基本逻辑

    String id = "items/1233"; //ID which has to to be deleted
    if (isCustomizedItem) {
        viewModel.deleteEvent(id);
    } else {
        viewModel.createCustomItems();
        viewModel.deleteEvent(id);
    }
Run Code Online (Sandbox Code Playgroud)

Livedata观察员

    viewModel.getItemDeleted().observe(this, serverResponse -> {
        if (serverResponse.status == Status.SUCCESS) {
            Timber.i("Successfully deleted");
        }
    });

    viewModel.itemCreated().observe(this, serverResponse -> {
        if (serverResponse.status == Status.SUCCESS) {
            Timber.i("new items added");
            //Again call delete for specific item
            viewModel.deleteEvent(id);
        }
    });
Run Code Online (Sandbox Code Playgroud)

Viewmodel代码

    createItems = Transformations.switchMap(eventData, (data) -> {
        if (canCreateItems(data)) {
            return AbsentLiveData.create();
        } else {
            return eventItemRepository.createItems();
        }
    });

    deleteItem …
Run Code Online (Sandbox Code Playgroud)

android mvvm retrofit android-livedata

10
推荐指数
1
解决办法
1412
查看次数