Wenn Besucher von ContentProvider die Änderungen in den Daten in ContentProvider kennen müssen, können sie getContentResolver().notifyChange(uri,null) aufrufen, wenn sich die Daten in ContentProvider ändern, um die in diesem URI registrierten Besucher zu benachrichtigen.
public class PersonContentProvider extends ContentProvider[ public Uri insert(Uri uri,ContentValues values){ db.insert("person","personid",values); getContext().getContentResolver().notifyChange(uri,null); }//通知注册在此URI上的访问者,此外注册在insert方法上}
Wenn Besucher von ContentProvider über Datenänderungen benachrichtigt werden müssen, müssen sie ContentObserver verwenden, um die Daten zu überwachen (die Daten werden durch URI beschrieben, wenn die Datenänderungsbenachrichtigung überwacht wird). Die onChange( )-Methode von 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); } } }
Testanwendung:
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); } });
Weitere verwandte Artikel zur Überwachung von Datenänderungen in ContentProvider basierend auf Android finden Sie auf der chinesischen PHP-Website!