Android内容观察者

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35427437/article/details/81091326

在编程语言里面有很多的模式一个有 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();
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_35427437/article/details/81091326