Android 呼叫后未通知ContentObserver
关闭:由于某些原因,它突然起作用。我检查了git,我什么都没改。我只希望它保持这种状态 我有一个ContentObserver,它是在我的第一个活动的onCreate方法中注册的。我知道它被调用是因为日志上这么说。onCreate方法中的相关代码如下所示:Android 呼叫后未通知ContentObserver,android,contentobserver,Android,Contentobserver,关闭:由于某些原因,它突然起作用。我检查了git,我什么都没改。我只希望它保持这种状态 我有一个ContentObserver,它是在我的第一个活动的onCreate方法中注册的。我知道它被调用是因为日志上这么说。onCreate方法中的相关代码如下所示: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.v(TAG, "on
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "on create");
setContentView(R.layout.activity_set_list);
SyncAdapter.SYNC_OBSERVER = new ContentObserver(new Handler(getMainLooper())) {
@Override
public boolean deliverSelfNotifications() {
return false;
}
@Override
public void onChange(boolean selfChange) {
Log.i(TAG, "On change for sync called.");
ContentResolver.requestSync(accountInstance, authority, Bundle.EMPTY);
}
};
final ContentResolver resolver = getContentResolver();
Uri uri = Uri.withAppendedPath(CONTENT_URI, VOTES_TABLE);
resolver.registerContentObserver(uri, true, SyncAdapter.SYNC_OBSERVER);
uri = Uri.withAppendedPath(CONTENT_URI, SETS_TABLE);
resolver.registerContentObserver(uri, true, SyncAdapter.SYNC_OBSERVER);
}
Uri uri = Uri.withAppendedPath(CONTENT_URI, SETS_TABLE);
Uri parentUri = getContentResolver().insert(uri, values);
另一方面,我有ContentProvider
,具有标准的插入、更新、删除和查询方法。例如,这是insert方法的实现:
@Override
public Uri insert(Uri uri, ContentValues values) {
Log.v(TAG, "insert");
getContext().getContentResolver().notifyChange(uri, null);
String table = localize(uri.getLastPathSegment());
SQLiteDatabase db = dbConnection.getWritableDatabase();
long rowId = db.insert(table, null, values);
return Uri.withAppendedPath(Constants.CONTENT_URI, String.valueOf(rowId));
}
在另一点上,我调用insert方法,如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "on create");
setContentView(R.layout.activity_set_list);
SyncAdapter.SYNC_OBSERVER = new ContentObserver(new Handler(getMainLooper())) {
@Override
public boolean deliverSelfNotifications() {
return false;
}
@Override
public void onChange(boolean selfChange) {
Log.i(TAG, "On change for sync called.");
ContentResolver.requestSync(accountInstance, authority, Bundle.EMPTY);
}
};
final ContentResolver resolver = getContentResolver();
Uri uri = Uri.withAppendedPath(CONTENT_URI, VOTES_TABLE);
resolver.registerContentObserver(uri, true, SyncAdapter.SYNC_OBSERVER);
uri = Uri.withAppendedPath(CONTENT_URI, SETS_TABLE);
resolver.registerContentObserver(uri, true, SyncAdapter.SYNC_OBSERVER);
}
Uri uri = Uri.withAppendedPath(CONTENT_URI, SETS_TABLE);
Uri parentUri = getContentResolver().insert(uri, values);
insert方法正在工作,打印日志“insert”,并将数据插入数据库。但是,不会打印ContentObserver的onChange方法中的日志,也不会启动同步。我知道同步不能立即启动,但是我希望日志能够像其他日志一样打印到控制台
有人知道为什么不调用ContentObserver吗
你需要进一步的信息吗?我可以在这里发布整个类,但是这是很多代码。覆盖
onChange(布尔自更改,Uri)
并查看在超类中覆盖了什么happensit,并调用onChange(布尔自更改),我错过了。。。您确定调用insert
时使用的CONTENT\u URI
与registerContentObserver
使用的CONTENT\u URI
相同吗?是。今天,当我再次运行测试时,它突然起了作用。我检查了我的git历史记录,我什么也没改。我再次检查了昨天的日志,但没有显示日志。但今天突然出现了日志。我不知道为什么它是固定的。谢谢你的帮助