最近我正在探索谷歌最近推出的 Android 架构。来自 Documentation我发现了这个:
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
}
}
Activity 可以按如下方式访问此列表:
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
});
}
}
我的问题是,我要这样做:
在
loadUsers()
函数我异步获取数据,我将首先检查数据库(房间)中的数据如果我没有在那里获取数据,我将调用 API 从 Web 服务器获取数据。
我会将获取的数据插入数据库(房间)并根据数据更新 UI。
推荐的方法是什么?
如果我开始 Service
从 loadUsers()
调用 API方法,如何更新 MutableLiveData<List<User>> users
变量 Service
?
最佳答案
我假设您使用的是 android architecture components .实际上,无论您在哪里调用 service、asynctask 或 handler
来更新数据都无关紧要。您可以使用 postValue(..)
方法从服务或异步任务中插入数据。你的类(class)应该是这样的:
private void loadUsers() {
// do async operation to fetch users and use postValue() method
users.postValue(listOfData)
}
由于 users
是 LiveData
,所以 Room
数据库负责在任何插入的地方提供用户数据。
注意:
在类似 MVVM 的架构中,repository 主要负责检查和拉取本地数据和远程数据。
关于android - 如何从后台服务更新 ViewModel 的 LiveData 并更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44204978/