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

博客介绍了在Android中,若ContentProvider访问者需知晓其数据变化,ContentProvider可调用getContentResolver().notifyChange(uri,null)通知访问者。访问者需用ContentObserver监听数据,系统会在数据变化时调用其onChange()方法,还给出了测试应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果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);

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值