欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

基于Android 监听ContentProvider 中数据变化的相关介绍

程序员文章站 2023-11-26 19:20:16
如果contentprovider的访问者需要知道contentprovider中的数据的变化情况,可以在contentprovider发生数据变化时调用getconten...

如果contentprovider的访问者需要知道contentprovider中的数据的变化情况,可以在contentprovider发生数据变化时调用getcontentresolver().notifychange(uri,null)来通知注册在此uri上的访问者。

复制代码 代码如下:

public class personcontentprovider extends contentprovider[
 public uri insert(uri uri,contentvalues values){
  db.insert("person","personid",values);
  getcontext().getcontentresolver().notifychange(uri,null);
 }//通知注册在此uri上的访问者,此外注册在insert方法上}

如果contentprovider的访问者需要得到数据变化通知,必须使用contentobserver对数据(数据使用uri描述)进行监听,当监听到数据变化通知时,系统就会调用contentobserver的onchange()方法。
复制代码 代码如下:

public class mainactivity extends activity {

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main);

  uri uri = uri.parse("content://cn.wordtech.providers.personprovider/person");
  this.getcontentresolver().registercontentobserver(uri, true, new personcontentdobserver(new handler()));
  // 第三个对象为监听对象,当数据发生改变的时候通知此对象做相应的改变
 }

 @override
 public boolean oncreateoptionsmenu(menu menu) {
  getmenuinflater().inflate(r.menu.main, menu);
  return true;
 }

 private class personcontentdobserver extends contentobserver {

  public personcontentdobserver(handler handler) {
   super(handler);
  }

  @override
  public void onchange(boolean selfchange) {
   uri uri = uri.parse("content://cn.wordtech.providers.personprovider/person");
   cursor cursor = getcontentresolver().query(uri, null, null, null,"personid desc limit 1");
   while (cursor.movetonext()) {
    string name = cursor.getstring(cursor.getcolumnindex("name"));
    log.i("name", name);
   }
   super.onchange(selfchange);
  }  }
}


测试应用:
复制代码 代码如下:

button btn = (button) findviewbyid(r.id.btn);
  btn.setonclicklistener(new onclicklistener() {
   @override
   public void onclick(view v) {
    uri uri = uri.parse("content://cn.wordtech.providers.personprovider/person");// 根据标识名得到内容提供者
    contentresolver cr = mainactivity.this.getcontentresolver();
    contentvalues values = new contentvalues();
    values.put("name", "livingstone");
    values.put("phone", "1101");
    values.put("amount", "1111111111");
    cr.insert(uri, values);
   }
  });