zoukankan      html  css  js  c++  java
  • android15

    【监听ContentProvider中数据的变化】

    如果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);
    }
    }
    如果ContentProvider的访问者需要得到数据变化通知,必须使用ContentObserver对数据(数据采用uri描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserver的onChange()方法:
    getContentResolver().registerContentObserver(Uri.parse("content://cn.itcast.providers.personprovider/person"),
              true,//true表示只要发出通知的Uri以方法第一个参数开头都能被监听到,否侧监听uri必须与发出通知的uri完全匹配才能被监听到
                                               new PersonObserver(new Handler()));
    public class PersonObserver extends ContentObserver{
     public PersonObserver(Handler handler) {
      super(handler);
      }
     public void onChange(boolean selfChange) {
         //此处可以进行相应的业务处理
     }
    }

     1 package cn.itcast.app;
     2 
     3 import android.app.Activity;
     4 import android.content.ContentResolver;
     5 import android.content.ContentValues;
     6 import android.net.Uri;
     7 import android.os.Bundle;
     8 import android.view.View;
     9 
    10 public class MainActivity extends Activity {
    11     /** Called when the activity is first created. */
    12     @Override
    13     public void onCreate(Bundle savedInstanceState) {
    14         super.onCreate(savedInstanceState);
    15         setContentView(R.layout.main);
    16     }
    17     
    18     public void insert(View v){
    19         Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person");
    20         ContentResolver resolver = this.getContentResolver();
    21         ContentValues values = new ContentValues();
    22         values.put("name", "A-App");
    23         values.put("phone", "18607687688");
    24         values.put("amount", "700000");
    25         resolver.insert(uri, values);
    26     }
    27 }
    View Code
     1 package cn.itcast.other;
     2 
     3 import android.app.Activity;
     4 import android.database.ContentObserver;
     5 import android.database.Cursor;
     6 import android.net.Uri;
     7 import android.os.Bundle;
     8 import android.os.Handler;
     9 import android.util.Log;
    10 
    11 public class MainActivity extends Activity {
    12     /** Called when the activity is first created. */
    13     @Override
    14     public void onCreate(Bundle savedInstanceState) {
    15         super.onCreate(savedInstanceState);
    16         setContentView(R.layout.main);
    17         Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person");
    18         this.getContentResolver().registerContentObserver(uri, true, new PersonContentObserver(new Handler()));
    19     }
    20     
    21     private class PersonContentObserver extends ContentObserver{
    22 
    23         public PersonContentObserver(Handler handler) {
    24             super(handler);
    25         }
    26 
    27         @Override
    28         public void onChange(boolean selfChange) {
    29             // select * from person order by personid desc limit 1
    30             Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person");
    31             Cursor cursor = getContentResolver().query(uri, null, null, null, "personid desc limit 1");
    32             if(cursor.moveToFirst()){
    33                 String name = cursor.getString(cursor.getColumnIndex("name"));
    34                 Log.i("MainActivity", name);
    35             }
    36         }
    37         
    38     }
    39 }
    View Code
  • 相关阅读:
    HDOJ2553 N皇后问题
    NYOJ284 坦克大战 BFS/优先队列
    NYOJ14 会场安排问题 贪心
    POJ1664 放苹果
    NYOJ119 士兵杀敌(三) RMQ
    POJ3264 Balanced Lineup RMQ/线段树
    POJ1127 Jack Straws
    HDOJ1128 Self Numbers
    水晶报表CrystalReports很强大也很简单!
    PetShop项目学习笔记(三)
  • 原文地址:https://www.cnblogs.com/Miami/p/3138490.html
Copyright © 2011-2022 走看看