[Android]SQLiteDataBase updates are not reflected in view
- M.R 
- Aug 22, 2021
- 1 min read
Phenomenon
SQLiteDataBase is read by ContentProvider and listed in RecyclerView. Even if I update the contents of the database, it is not reflected in RecyclerView.
Cause
The contentProvider query () method did not call the setNotificationUri () method.
This method associates the uri of the data with the cursor, and the CursorLoader will observe the uri. If you call getContext (). getContentResolver (). notifyChange () with the insert (), update (), delete () methods of ContentProvider, the data change will be notified and CursorLoader will reload it (I understande so).
In this case, notifyChange () was called, but if I forget setNotificationUri (), does it mean that the uri to be monitored is not set in the first place?
(Click here for details)
ContentProvider
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
    //~omit~
    
    cursor.setNotificationUri(getContext().getContentResolver(), uri);
    //↑don't forget this
    return cursor;
}
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
    //~omit~
    
    getContext().getContentResolver().notifyChange(uri, null);
    //↑don't forget this
    return Uri.withAppendedPath(uri, String.valueOf(id));
}






Comments