学习内容提供者第8节视频,为什么插入数据后监听不到数据的变化?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ContentResolver contentResolver = getContentResolver();
Uri uri = Uri.parse("content://com.example.contentprovider/user");
contentResolver.registerContentObserver(uri, false, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.d(TAG, "用户数据发生变化.. " + selfChange);//此Log没有打出
//获取新的内容
}
});
private void addUser() {
ContentResolver contentResolver = getContentResolver();
Uri uri = Uri.parse("content://com.example.contentprovider/user");
ContentValues values = new ContentValues();
values.put(Constants.FIELD_USER_NAME, "BillGates");
values.put(Constants.FIELD_PASSWORD, "123456");
values.put(Constants.FIELD_SEX, "male");
values.put(Constants.FIELD_AGE, "59");
contentResolver.insert(uri, values);
}
写的addUser成功执行,数据也成功插入,但是上面的Log.d(TAG, "用户数据发生变化.. " + selfChange);没有出现
Log只出现一条Log.d(TAG, "insert user result--> " + id);
UserProvider里的insert()
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
int result = sUriMatcher.match(uri);
if (result == USER_MATCH_CODE) {
SQLiteDatabase db = mUserDatabaseHelper.getWritableDatabase();
long id = db.insert(Constants.TABLE_NAME, null, values);
Uri resultUri = Uri.parse("content://com.example.contentprovider/user" + id);//拼接
Log.d(TAG, "insert user result--> " + id);//此Log可以成功打出
//数据已经变化通知其他地方(谁监听就通知谁)
getContext().getContentResolver().notifyChange(resultUri, null);
return resultUri;
} else {
throw new IllegalArgumentException("参数错误");
}
}
Manifest注册
<provider
android:name=".provider.UserProvider"
android:authorities="com.example.contentprovider;sobUserProvider"
android:exported="true" />
Uri resultUri = Uri.parse("content://com.example.contentprovider/user/" + id);//斜杠拼接
Uri resultUri = Uri.parse("content://com.example.contentprovider/user" + id);//拼接
这里user跟id间不需要一个
视频里明明有说第二个参数是有什么用的。