最近我正在探索谷歌最近推出的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.建议的方法是什么?
如果我开始Service从loadUsers()方法中调用API ,我该如何更新MutableLiveData<List<User>> users …
android background-service viewmodel android-room android-architecture-components
我有一个服务,提供大多数时间用户可见的UI.
当我遇到问题时,我正在尝试新的应用程序架构.
MyModelviewModel viewModel = ViewModelProviders.of(this).get(MyModelviewModel.class);
但正如你所知,this只能AppCompat或Fragment
还有其他选择吗?或者我可以将观察者直接放在我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)