كيفية الاستماع لإجراء تغييرات في قاعدة بيانات الاتصال

StackOverflow https://stackoverflow.com/questions/1401280

  •  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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top