top of page

[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));
}

最新記事

すべて表示

【Android】Android APIレベルとは

はじめに google play storeにアプリをアップロードしようとしたら下記のエラーが発生 現在、お客様のアプリは API レベル 31 を対象にしています。セキュリティとパフォーマンスが最適化された最新の API を利用するには、API レベル 33...

Comentarios


カテゴリ

あなたの買い物をサポートする
アプリ Shop Plan

iphone6.5p2.png

​いつ何を買うかの計画を立てられるアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

靴を大切にしよう!靴管理アプリ SHOES_KEEP

納品:iPhone6.5①.png

靴の履いた回数、お手入れ回数を管理するアプリです。

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png

「後で読む」を忘れないアプリ ArticleReminder

気になった​Webサイトを登録し、指定時刻にリマインダを送れるアプリです

google-play-badge.png
Download_on_the_App_Store_Badge_JP_RGB_blk_100317.png
bottom of page