>  기사  >  Java  >  Android 기반 ContentProvider의 데이터 변경 모니터링 소개

Android 기반 ContentProvider의 데이터 변경 모니터링 소개

高洛峰
高洛峰원래의
2017-02-07 15:53:521287검색

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로 설명됨). 데이터 변경 알림이 모니터링되면 시스템은 onChange를 호출합니다. () ContentObserver의 메소드.

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);
   }
  });

Android 기반 ContentProvider의 데이터 변경 모니터링에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.