Android内容观察者

在编程语言里面有很多的模式一个有 24种 如单例设计模式   

本篇文章要讲的是Android内容观察者模式 

内容观察者一般使用与观察某个数据有没有发生改变  如果改变的就发生一个消息给内容观察者调用onChange()方法

例子:   当我第一次查询数据库是数据放入一个集合中    数据库如果发生改变   使用内容观察者告诉集合是否要重写查询内容

ublic class LockAppDao {

    private final LockAppDb db;
    private Context context;
    public LockAppDao(Context context){
        db = new LockAppDb(context);
        this.context=context;
    }
    public List<String> findAll(){
        List<String> datalist = new ArrayList<String>();
        SQLiteDatabase sql = db.getReadableDatabase();
        Cursor query = sql.query(LockAppDb.TABLE_NAME, new String[]{"packname"}, null,null, null, null, null);
        while (query.moveToNext()){
            String packName=query.getString(0);
            datalist.add(packName);
        }
        query.close();
        sql.close();
        return datalist;
    }
    public boolean add(String packname){
        SQLiteDatabase sql = db.getWritableDatabase();
        ContentValues value = new ContentValues();
        value.put("packname",packname);
        long id=sql.insert(LockAppDb.TABLE_NAME,null,value);
        if (id>0){
            //只要数据发送改变就大吼一声
            Uri uri=Uri.parse("content://com.phonesafe.dataChange");
            context.getContentResolver().notifyChange(uri,null);
        }
        return id>0;
    }
    public boolean delete(String packname){

        SQLiteDatabase sql = db.getWritableDatabase();
        long id=sql.delete(LockAppDb.TABLE_NAME,"packname=?",new String[]{packname});
        if (id>0){
            //只要数据发送改变就大吼一声
            Uri uri=Uri.parse("content://com.phonesafe.dataChange");
            context.getContentResolver().notifyChange(uri,null);
        }
        return id>0;
    }
    public boolean find(String packname){
        SQLiteDatabase sql = db.getReadableDatabase();
        Cursor query = sql.query(LockAppDb.TABLE_NAME, new String[]{"packname"}, "packname=?", new String[]{packname}, null, null, null);
        return query.moveToNext();
    }
}

内容提供者   :类   触发内容提供者调用onChange()方法   一般是内部类

  @Override
    public void onCreate() {

        //注册内容观察者   就是初始化  配置清单文件差不多
        Uri uri=Uri.parse("content://com.phonesafe.dataChange");
        innerContent = new InnerContent(new Handler());
        getContentResolver().registerContentObserver(uri,true, innerContent);
    }

//内容观察者
    class InnerContent extends ContentObserver{
        //构造方法
        public InnerContent(Handler handler) {
            super(handler);
        }
        //当数据发送改变时调用
        @Override
        public void onChange(boolean selfChange) {
           findAllData = dao.findAll();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达帮主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值