[解決済み] バックグラウンドサービスからViewModelのLiveDataを更新し、UIを更新する方法
質問
最近、googleが発表したAndroid Architectureについて調べています。以下のサイトより ドキュメンテーション こんなのがありました。
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()
関数で、私はデータを非同期に取得し、最初にそのデータのデータベース(部屋)をチェックします。 -
もしそこでデータが得られない場合、私はウェブサーバーからデータを取得するためにAPIコールを行います。
-
取得したデータをデータベース(Room)に挿入し、そのデータに応じてUIを更新します。
これを行うには、どのようなアプローチが推奨されますか?
もし私が
Service
から API を呼び出すために
loadUsers()
メソッドから API を呼び出す場合、どのようにすれば
MutableLiveData<List<User>> users
変数から
Service
?
どのように解決するのですか?
私はあなたが使用していることを仮定しています
アンドロイド・アーキテクチャ・コンポーネント
. 実際には、どこで
service, asynctask or handler
を呼び出してデータを更新する場所には関係ありません。サービスから、あるいは非同期タスクから、データを挿入することができます。
postValue(..)
メソッドを使って挿入できます。あなたのクラスはこのようになります。
private void loadUsers() {
// do async operation to fetch users and use postValue() method
users.postValue(listOfData)
}
のように
users
は
LiveData
,
Room
データベースは、挿入された場所にユーザーのデータを提供する責任があります。
Note:
MVVMのようなアーキテクチャでは、リポジトリは主にローカルデータとリモートデータのチェックとプルに対して責任を持ちます。
関連
-
[解決済み] TextViewでテキストを水平・垂直方向にセンタリングするには?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidでサービスが稼働しているかどうかを確認する方法を教えてください。
-
[解決済み] RecyclerViewでエンドレスリストを実装するには?
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] 文字列リソースにHTML?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] android: imageview の画像を画面に合わせて伸縮させる
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] Android Lintが翻訳されていない文字列を訴えないようにする。
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] Android: xml リソースからの整数値
-
[解決済み] LayoutParamsの高さを密度に依存しないピクセル数でプログラム的に設定する。
-
[解決済み] 文字列リソースにHTML?