ContentProviderでのデータの変更の傍受
1949 ワード
2つのアプリケーションA,Bが同時にContentProviderに問い合わせる場合、Aアプリケーションがデータベース内のデータを更新した場合、どのようにしてBアプリケーションもContentProviderの変化を自動的に傍受し、更新されたデータを得ることができますか?
次はBのアプリのactivity
注意:Aアプリケーションがデータを更新した後、Bアプリケーションに対して、次のコードを使用することを自発的に通知する必要があります.
getContext().getContentResolver().notifyChange(uri, null);
次はBのアプリのactivity
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person");
getContentResolver().registerContentObserver(uri, true, new PersonProviderObServer(new Handler()));
}
private final class PersonProviderObServer extends ContentObserver{
public PersonProviderObServer(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
Uri uri = Uri.parse("content://cn.itcast.providers.personprovider/person");
ContentResolver contentResolver = getContentResolver();
// select * from person order by personid desc limit 1
Cursor cursor = contentResolver.query(uri, null, null, null, "personid desc limit 1");
if(cursor.moveToFirst()){
int personid = cursor.getInt(cursor.getColumnIndex("personid"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
int amount = cursor.getInt(cursor.getColumnIndex("amount"));
Log.i("MainActivity", "id="+ personid+ ",name="+ name+ ",phone="+ phone+ ",amount="+ amount);
}
}
}
}
注意:Aアプリケーションがデータを更新した後、Bアプリケーションに対して、次のコードを使用することを自発的に通知する必要があります.
getContext().getContentResolver().notifyChange(uri, null);