安卓之Observer内容观察者的原理

1.应用A提供者:在ContentProvide的增删查的方法中通知uri数据发生改变

Uri baseuriUri=Uri.parse("content://cn.itcast.db.personprovider");

public Uri insert(Uri uri, ContentValues values) {
int result=matcher.match(uri);
switch(result){
case INSERT:
SQLiteDatabase db=openHelper.getWritableDatabase();
db.insert("person", "personid", values);
//当数据发生改变,给某一个uri发出数据改变的通知
getContext().getContentResolver().notifyChange(baseuriUri, null);
return uri;
default:
throw new IllegalArgumentException("uri 不能被识别");
}

2.应用B观察者:给URI注册内容观察者

public class OtherActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
Uri uri = Uri.parse("content://cn.itcast.db.personprovider/person/10");
//给URI注册内容观察者
//notifyForDescendents为true 只要是满足content://cn.itcast.db.personprovider都会通知改变
//如果为false则必须是详细地址content://cn.itcast.db.personprovider/person/10
getContentResolver().registerContentObserver(uri, true, new MyObserver(new Handler()));

}
public class MyObserver extends ContentObserver{


public MyObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
//当观察者发现数据改变后调用的方法
@Override
public void onChange(boolean selfChange) {
System.out.println("数据发生改变了");
super.onChange(selfChange);
}

}


3.如果数据库的数据发生改变,observer就会调用onChange方法

你可能感兴趣的:(安卓之Observer内容观察者的原理)