最近、私は最近Googleによって導入されたAndroid Architectureを模索しています。次のように活動がこのリストにアクセス可能バックグラウンドサービスとアップデートUIからViewModelのLiveDataを更新する方法
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
}
}
:
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()
機能では、あるDocumentationから、私はこれを発見しましたそのデータのデータベース(Room)。そこにデータがない場合は、Webサーバーからデータを取得するAPI呼び出しを行います。次に、取得したデータをデータベース(ルーム)に挿入し、データに応じてUIを更新します。これを行うために推奨されるアプローチは何ですか?
loadUsers()
メソッドからService
メソッドを呼び出して開始すると、の変数をMutableLiveData<List<User>> users
変数に更新するにはどうすればよいですか?
まず、リポジトリがありません。あなたのViewModelは、データ読み込みタスクを行うべきではありません。それ以外の場合は、あなたの部屋を使用しているので、あなたのサービスはViewModelのLiveDataを直接更新する必要はありません。 Roomにデータを挿入するだけで、ViewModelDataはRoomにのみ接続し、Roomから更新を取得する必要があります(サービスがデータを挿入した後)。しかし、絶対的なベストアーキテクチャーについては、このページの一番下からNetworkBoundResourceクラスの実装を見てください:https://developer.android.com/topic/libraries/architecture/guide.html –
提案ありがとうございました:) – CodeCameo
リポジトリクラスは、ROOMまたはアンドロイドのアーキテクチャのコンポーネントを記述するオフショアのドキュメントに記載されていません – jonney