CLOSED:由于某些原因,它非常有用。我检查了git,我没有改变一件事。我希望它保持这种状态。
我有一个ContentObserver,它在我第一次活动的onCreate方法中注册。我知道它被调用,因为日志说的是这样。 onCreate方法中的相关代码如下所示:
@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);
}
另一方面,我有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));
}
在另一点上,我称之为插入方法:
Uri uri = Uri.withAppendedPath(CONTENT_URI, SETS_TABLE);
Uri parentUri = getContentResolver().insert(uri, values);
insert方法正常工作,打印日志'insert'并将数据插入数据库。但是,ContentObserver的onChange方法的日志不会打印,也不会启动同步。我知道同步不能立即启动,但我会将日志作为任何其他日志打印到控制台。
有谁知道为什么没有调用ContentObserver?
您还需要更多信息吗?我可以在这里发布整个课程,但这是很多代码。