自定义数据库中使用 contentObserver

来源:互联网 发布:西安高新广电网络 编辑:程序博客网 时间:2024/06/05 14:30

系统自带的数据库的Provider中都有通知该数据库观察者数据库更新的机制。

比如在CallLogProvider的代码中发现了通知数据库进行更新了。代码如下:

  protected void notifyChange() {
        getContext().getContentResolver().notifyChange(CallLog.CONTENT_URI, null,
                false /* wake up sync adapters */);
    }

要想在自定义的数据库中也能使用ContentObserver,必须在数据库Dao中所有修改数据的方法中添加如下代码:

getContext().getContentResolver().notifyChange(自定义uri, null)

在你要使用ContentObserver的地方注册该uri的观察者;

例如:

1.Dao中通知更新:

public boolean insert(String packname) {
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("packname", packname);
long id = db.insert("lockinfo", null, values);
db.close();
if(id!=-1){
context.getContentResolver().notifyChange(
Uri.parse("content://com.mobilesecurity.updateLockDb"),
null);

return true;
}
return  false;
}

public boolean delete(String packname) {
SQLiteDatabase db = helper.getWritableDatabase();
int count = db.delete("lockinfo", "packname = ?",
new String[] { packname });
db.close();
if (count > 0) {
context.getContentResolver().notifyChange(
Uri.parse("content://com.mobilesecurity.updateLockDb"),
null);

return true;
}
return  false;
}


2. 注册ContentObserver:

observer =new MyDbObserver(new Handler());
Uri uri = Uri.parse("content://com.mobilesecurity.updateLockDb");
getContentResolver().registerContentObserver(uri, true, observer);


这样就可以在自定义的数据库中使用内容观察者了。


0 0
原创粉丝点击