Android Contacs - PullRequest
       23

Android Contacs

1 голос
/ 03 февраля 2012

Я могу получить все контакты из списка контактов в Android (номера телефонов и электронные письма) но получение их всех занимает много времени. Чтобы ускорить это, я сохранил их в своем приложении Но сейчас я не могу получить обновленные контакты. Как их нужно синхронизировать с моим приложением?

Проблема возникает, когда я пытаюсь отобразить их в списке, потому что база данных телефонных номеров и электронных писем пользователя превышает 2000. В настоящее время я использую реализацию базового адаптера для этого. Может ли кто-нибудь помочь мне с большой базой данных контактов?

Приложение, подобное GroupMe n Viber, очень быстро показывает все пользовательские контакты, может кто-нибудь подскажет, как этого добиться.

String KEY_NAME = "Name";
    String KEY_NO   = "No";

    String selection = ContactsContract.CommonDataKinds.Phone.IN_VISIBLE_GROUP + " = 1";
    String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    String data="";
    String name="";
    ContactEntry contactObj;
    String id;
    String index="";


    final String[] projection = new String[]{ContactsContract.Contacts._ID , ContactsContract.Contacts.DISPLAY_NAME , ContactsContract.Contacts.HAS_PHONE_NUMBER};

    final String[] email_projection = new String[] {ContactsContract.CommonDataKinds.Email.DATA , ContactsContract.CommonDataKinds.Email.TYPE};

    final String[] phone_projection = new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE};

    ContentResolver cr = context.getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI , projection , selection , null , sortOrder);

    if(cur.getCount()>0){

        while(cur.moveToNext()){

             id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
             name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

            if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {

                // get the phone number
                Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI , phone_projection , 
                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null);


                while (pCur.moveToNext()){

                         data = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                        if(!temp.contains(data) && !data.equals(null)){
                            //Adding PhoneNumbers in List   
                        }
                } 
                    pCur.close();
            }

           Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, email_projection,
                                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",  new String[]{id}, null); 


           while (emailCur.moveToNext()){ 

                data = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

                if(!temp.contains(data) && !data.equals(null)){ 
                                  //Adding Email in List
                }
            } 
            emailCur.close();
        }
    }

Я использовал вышеуказанный код Как я могу передать Curser в CurosrAdaper для всех электронных писем и телефонных номеров. Пожалуйста, помогите мне, я не нашел никакого решения.

Ответы [ 3 ]

1 голос
/ 03 февраля 2012

Android предоставляет адаптер синхронизации для решения этой проблемы.Вы можете обратиться к этому примеру для реализации.http://developer.android.com/resources/samples/SampleSyncAdapter/index.html

1 голос
/ 03 февраля 2012

У меня была такая же проблема, я использовал ResourceCursorAdapter , который выбирает контакты так же быстро, как Contact API с Android ....

0 голосов
/ 03 февраля 2012

Я думаю, что вам нужно что-то вроде сервисной (или) асинхронной задачи, которая периодически обновляет контакты с телефона в ваше локальное приложение.В противном случае вы не можете синхронизировать.

...