كيفية الاستماع لإجراء تغييرات في قاعدة بيانات الاتصال
-
05-07-2019 - |
سؤال
وأنا أحاول أن يستمع لأي تغيير في قاعدة بيانات الاتصال.
وهكذا أنا خلق بلدي contentObserver وهي فئة الأطفال من ContentObserver
:
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
System.out.println (" Calling onChange" );
}
}
MyContentObserver contentObserver = new MyContentObserver();
context.getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver);
ولكن عند استخدام 'EditContactActivity
"لتغيير قاعدة بيانات الاتصال، بلدي onChange()
لا الحصول على استدعاء.
المحلول
ولقد نشر المثال الخاص بك كما هو، وأنه يعمل بشكل جيد.
package com.test.contentobserver;
import android.app.Activity;
import android.database.ContentObserver;
import android.os.Bundle;
import android.provider.Contacts.People;
public class TestContentObserver extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.getApplicationContext().getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver);
}
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
}
}
MyContentObserver contentObserver = new MyContentObserver();
}
وهكذا، يجب أن تفعل شيئا آخر على خطأ.
هل إجراء التغييرات من خلال المؤشر مسجلة المراقب مع؟
وتحقق أنه مع deliverSelfNotifications وظيفة المراقب (). (فإنها ترجع كاذبة افتراضيا)
وقد ترغب في تجاوز تلك الوظيفة مراقب مع شيء من هذا القبيل:
@Override
public boolean deliverSelfNotifications() {
return true;
}
تأكد من أن People.CONTENT_URI يشير إلى القيمة الصحيحة (android.provider.Contacts.People).
وأيضا، أود أن أقترح عليك استخدام معالج مع ContentObserver، على الرغم من أن هذا ليس ما يجعل الشفرة خطأ في هذه الحالة.
نصائح أخرى
وA TIP بسيط عن الجواب MannyNS الصورة.
وهنا، تم إهمال People.CONTENT_URI
.
ورمز على النحو التالي بدلا من ذلك .--> ContactsContract.Contacts.CONTENT_URI
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);