调用后没有通知ContentObserver

时间:2015-10-15 21:03:02

标签: android contentobserver

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?

您还需要更多信息吗?我可以在这里发布整个课程,但这是很多代码。

0 个答案:

没有答案