Как показать телефонные контакты в ListView

Ниже приведен мой код, на самом деле на экране он не показывает мне никакого контакта. В эмуляторе у меня добавлено 5 контактов. Пожалуйста, скажите мне, что делать.

{
    //some code
    Cursor cur = getContacts();
    String[] fields = new String[] {ContactsContract.Data.DISPLAY_NAME};
    SimpleCursorAdapter adapter = 
        new SimpleCursorAdapter(this, 
                                R.layout.list_view_item_new,
                                cur,
                                fields,
                                new int[] {R.id.contactEntryText});
    lv.setAdapter(adapter);
}

private Cursor getContacts() {  
    // Run query     
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String[] projection = 
        new String[]{ ContactsContract.Contacts._ID,
                      ContactsContract.Contacts.DISPLAY_NAME }; 
    String selection = null;
    String[] selectionArgs = null;  
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + 
        " COLLATE LOCALIZED ASC";  
    return managedQuery(uri, projection, selection, selectionArgs, sortOrder);  
}

person Neha    schedule 02.03.2011    source источник
comment
Не могли бы вы показать нам, как выглядит list_view_item_new?   -  person E.Z. Hart    schedule 02.03.2011
comment
спасибо, что указали в этом направлении, на самом деле я использовал линейную компоновку внутри, у меня есть текстовое представление. теперь я удалил линейную компоновку. я получаю свой список.   -  person Neha    schedule 03.03.2011


Ответы (2)


Я скопировал и выполнил почти тот же код, и он работает:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Cursor cur = getContacts();

        ListView lv = getListView();

       String[] fields = new String[] {ContactsContract.Data.DISPLAY_NAME};

       SimpleCursorAdapter adapter = 
                new SimpleCursorAdapter(this, 
                                        R.layout.main,
                                        cur,
                                        fields,
                                        new int[] {R.id.txtbox});
          lv.setAdapter(adapter);         
    }    

    private Cursor getContacts() {  
        // Run query     
        Uri uri = ContactsContract.Contacts.CONTENT_URI;

        String[] projection = 
                new String[]{ ContactsContract.Contacts._ID,
                              ContactsContract.Contacts.DISPLAY_NAME }; 
            String selection = null;
            String[] selectionArgs = null;  
            String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + 
                " COLLATE LOCALIZED ASC";  
            return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
    }

Пожалуйста, проверьте, не сделали ли вы что-то не так в реализации textview?

person adi    schedule 08.03.2012
comment
Для тех, кто хочет также иметь проекцию на номер телефона. Я пробовал этот пример, но он выдавал мне ошибку, говорящую о недопустимом столбце data1. Вот решение: stackoverflow.com/questions/21811780/ - person JPerk; 15.05.2017

Сначала я бы просто сузил проблему.

1) Проверьте, есть ли у вас права на чтение контактов

<uses-permission android:name="android.permission.READ_CONTACTS"/>

2) Проверьте, есть ли у курсора какие-либо результаты

cur.getCount()
person wonglik    schedule 02.03.2011
comment
У файла androidmanifest есть это разрешение, а getcount() возвращает 5, но я все равно не получаю значения в адаптере. Есть ли способ проверить данные строки в курсоре?? если в отладке можно проверить, то подскажите пожалуйста какое свойство проверять?? заранее спасибо.. - person Neha; 02.03.2011
comment
@neha, вы всегда можете перебирать курсор, например: «пока (c.moveToNext()) ...», но меня беспокоит одна вещь. Один раз вы используете «ContactsContract.Data.DISPLAY_NAME» и один раз «ContactsContract.Contacts.DISPLAY_NAME». Это такие же? - person wonglik; 02.03.2011