Si les visiteurs de ContentProvider ont besoin de connaître les modifications apportées aux données dans ContentProvider, ils peuvent appeler getContentResolver().notifyChange(uri,null) lorsque les données dans ContentProvider changent pour informer les visiteurs enregistrés sur cet 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方法上}
Si les visiteurs de ContentProvider doivent être informés des modifications de données, ils doivent utiliser ContentObserver pour surveiller les données (les données sont décrites par URI). Lorsque la notification de modification de données est surveillée, le système appellera. Méthode onChange() de 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); } } }
Application de test :
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); } });
Pour plus d'articles connexes sur la surveillance des modifications des données dans ContentProvider basé sur Android, veuillez faire attention au site Web PHP chinois !