源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-08-14 09:41 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:基于Android 监听ContentProvider 中数据变化的相关介绍
如果ContentProvider的访问者需要知道ContentProvider中的数据的变化情况,可以在ContentProvider发生数据变化时调用getContentResolver().notifyChange(uri,null)来通知注册在此URI上的访问者。
[u]复制代码[/u] 代码如下:
public class PersonContentProvider extends ContentProvider[  public Uri insert(Uri uri,ContentValues values){   db.insert("person","personid",values);   getContext().getContentResolver().[b]notifyChange[/b](uri,null);  }//通知注册在此URI上的访问者,此外注册在insert方法上}
如果ContentProvider的访问者需要得到数据变化通知,必须使用ContentObserver对数据(数据使用URI描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserver的onChange()方法。
[u]复制代码[/u] 代码如下:
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);   }  } }
[b]测试应用: [/b]
[u]复制代码[/u] 代码如下:
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);    }   });
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部