自定义注册内容观察者

来源:互联网 发布:汉仪菱心体简 for mac 编辑:程序博客网 时间:2024/06/04 09:00

当我们的某个数据库或者数组列表等发生添加,删除等改变时,我们希望能在代码中立马知道,那么这时候可以使用内容观察者。

先在想观察的方法里注册观察者

public void add(String packageName) {    SQLiteDatabase db = openHelper.getWritableDatabase();    ContentValues values = new ContentValues();    values.put("packagename", packageName);    db.insert("info", null, values);    db.close();    //自定义注册一个内容观察者,uri的字符串随便写什么,但是要有content://头。    context.getContentResolver().notifyChange(Uri.parse("content://com.example.wanghao.didisafe/applock.db"),null);}public void delete(String packageName) {    SQLiteDatabase db = openHelper.getWritableDatabase();    db.delete("info", "packagename = ?", new String[]{packageName});    db.close();    //自定义注册一个内容观察者    context.getContentResolver().notifyChange(Uri.parse("content://com.example.wanghao.didisafe/applock.db"), null);}
然后在正在运行的代码中拿到这个观察者的内容解析者
//在初始化代码里注册一个内容解析者Uri uri = Uri.parse("content://com.example.wanghao.didisafe/applock.db");//Uri是一样的observer = new MyObserver(new Handler());getContentResolver().registerContentObserver(uri, true, observer);
在MyObserver里处理变化的数据
private class MyObserver extends ContentObserver{   public MyObserver(Handler handler) {      super(handler);   }   @Override   public void onChange(boolean selfChange) {      super.onChange(selfChange);      Log.i(TAG,"啊啊啊啊,我发现了数据库的内容变化了。");      protectedPacknames = dao.findAll();   }
在destroy里反注册
public void onDestroy() {    // TODO Auto-generated method stub    super.onDestroy();    getContentResolver().unregisterContentObserver(observer);    observer = null;
}

0 0