検索
[Android]SQLiteDataBaseの更新がviewに反映されない
- M.R

- 2020年8月9日
- 読了時間: 1分
更新日:2020年8月10日
現象
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));
}
![[Android] TextViewを折り返したときに左右中央揃えにならない](https://static.wixstatic.com/media/90b712_795b2578740242d6b5309c31700a0f49~mv2.png/v1/fill/w_726,h_1438,al_c,q_90,enc_avif,quality_auto/90b712_795b2578740242d6b5309c31700a0f49~mv2.png)






コメント