相关疑难解决方法(0)

如何从后台服务和更新UI更新ViewModel的LiveData

最近我正在探索谷歌最近推出的Android架构.从文档中我发现了这个:

public class MyViewModel extends ViewModel {
    private MutableLiveData<List<User>> users;
    public LiveData<List<User>> getUsers() {
        if (users == null) {
            users = new MutableLiveData<List<Users>>();
            loadUsers();
        }
        return users;
    }

    private void loadUsers() {
        // do async operation to fetch users
    }
}
Run Code Online (Sandbox Code Playgroud)

活动可以按如下方式访问此列表:

public class MyActivity extends AppCompatActivity {
    public void onCreate(Bundle savedInstanceState) {
        MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
        model.getUsers().observe(this, users -> {
            // update UI
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在loadUsers()我正在异步获取数据的函数中,我将首先检查数据库(Room)中的数据,如果我没有得到数据,我将进行API调用以从Web服务器获取数据.然后我将获取的数据插入数据库(Room)并根据数据更新UI.建议的方法是什么?

如果我开始ServiceloadUsers()方法中调用API ,我该如何更新MutableLiveData<List<User>> users …

android background-service viewmodel android-room android-architecture-components

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

Android ViewModel内部服务(替代)

我有一个服务,提供大多数时间用户可见的UI.

当我遇到问题时,我正在尝试新的应用程序架构.

MyModelviewModel viewModel = ViewModelProviders.of(this).get(MyModelviewModel.class);

但正如你所知,this只能AppCompatFragment

还有其他选择吗?或者我可以将观察者直接放在我LiveData喜欢的东西上ViewModel

viewModel.getList().observe(Playground.this, new Observer<List<TestEntity>>() {
    @Override
    public void onChanged(@Nullable List<TestEntity> items) {
        recyclerViewAdapter.addItems(items);
    }
});
Run Code Online (Sandbox Code Playgroud)

android mvvm android-livedata android-viewmodel

11
推荐指数
1
解决办法
3420
查看次数