广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-07 07:50:20 次阅读 稿源:互联网
    广告

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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告