[Android]SQLiteDataBaseの更新がviewに反映されない
現象
SQLiteDataBaseをContentProviderで読み取ってRecyclerViewに一覧表示している。データベースの内容を更新してもそれがRecyclerViewに反映されない。
原因
ContentProviderのquery()メソッドでsetNotificationUri()メソッドを呼び出していなかった。
このメソッドでcursorにデータのuriが紐づけられ、CursorLoaderでuriを見てくれるようになる。ContentProviderのinsert(), update(), delete()メソッドでgetContext().getContentResolver().notifyChange()を呼びだすと、データの変更が通知され、CursorLoaderが再読み込みをしてくれる(という理解)。
今回の場合は、notifyChange()は呼び出していたが、setNotificationUri()を忘れるとそもそも監視するuriが設定されないということなのかな?
(詳しくはこちら)
ContentProvider
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
//~略~
cursor.setNotificationUri(getContext().getContentResolver(), uri);
//↑これを忘れない
return cursor;
}
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
//~略~
getContext().getContentResolver().notifyChange(uri, null);
//↑これを忘れない
return Uri.withAppendedPath(uri, String.valueOf(id));
}
最新記事
すべて表示はじめに google play storeにアプリをアップロードしようとしたら下記のエラーが発生 現在、お客様のアプリは API レベル 31 を対象にしています。セキュリティとパフォーマンスが最適化された最新の API を利用するには、API レベル 33...
課題 androidのBottomNavigationを使用したアプリを作っている。ページを移動して戻って来た時にTextViewなどに書き込んだデータを保存しておきたい。 問題点 通常ActivityやFragmentを離れて戻って来た時にviewの内容などを保存したいと...
Comentarios