Контакты Android Не удается получить данные - PullRequest
0 голосов
/ 05 мая 2011

Android Contacts сводит меня с ума! Этот код возвращает пустые курсоры, но контакты существуют! Кто-нибудь может увидеть то, что я не могу?

        ContentResolver cr = getContentResolver();
        String query = ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = " +pickedID;
        Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,query , null, null);
        pCur.moveToFirst();
            while (pCur.moveToNext()) {
                    contactPhone.setText(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)));
                } 
                pCur.close();

               query = ContactsContract.CommonDataKinds.Email.CONTACT_ID +" = " +pickedID;
                pCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,query , null, null);
                pCur.moveToFirst();
                        while (pCur.moveToNext()) {
                            contactPhone.setText(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)));
                        } 
                        pCur.close();

Ответы [ 3 ]

2 голосов
/ 12 декабря 2011

У меня была такая же проблема с нулевым курсором, и моя проблема была в том, что я забыл добавить следующая строка кода в файле Manifest.xml:

uses-permission android:name="android.permission.READ_CONTACTS"
1 голос
/ 14 сентября 2011

Я не уверен, что это вся причина проблемы, но вы звоните

pCur.moveToFirst();

, который перемещает курсор к первой записи. Тогда вы немедленно позвоните

while (pCur.moveToNext())

, который перемещает курсор ко второй записи. Итак, вы пропускаете первую запись.

Оставьте pCur.moveToFirst(); и просто выйдите из цикла while и посмотрите, поможет ли это.

0 голосов
/ 05 мая 2011

Я думаю, что корень вашей проблемы в том, как вы изначально получаете список контактов.

 Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,query , null, null);

должно быть ..

Cursor pCur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
...