2012-04-30 2 views
0
Cursor searchCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
     new String[] {"_id",Phone.DISPLAY_NAME}, Phone.DISPLAY_NAME + " like ?", 
     new String[]{ "%" + cc.get("contactName").toString() + "%"}, null); 

startManagingCursor(searchCursor); 
while(searchCursor.isAfterLast() == false) { 
    final String name = searchCursor.getString(searchCursor.getColumnIndex(Phone.DISPLAY_NAME)); 
    final String number = searchCursor.getString(searchCursor.getColumnIndex(Phone.NUMBER)); 
    str =new String[]{name,number}; 
    ada = new SimpleCursorAdapter(this, R.layout.view_contacts_listview_layout, searchCursor, str, new int[] { R.id.contactName, R.id.contactPhoneNo }); 
} 

lvSearch.setAdapter(ada); 

Запрос курсора, работающий нормально, только создает проблему в простом адаптере курсора.Ошибка в простейшем адаптере курсора, не работает

+0

какая ошибка? или мы просто думаем ... –

+0

Опишите _how_, он не работает и не публикует никаких ошибок logcat. – Sam

ответ

1
str =new String[]{name,number}; 

должен быть

str = new String[]{Phone.DISPLAY_NAME, Phone.NUMBER}; 

Вы должны передать имена столбцов к SimpleCursorAdapter. Вместо этого, вы передаете значение столбца (. Ех 555-555-5555, «джон») в качестве имен столбцов использовать

Кроме того, код может быть упрощен:

Cursor searchCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
       new String[] {"_id",Phone.DISPLAY_NAME}, Phone.DISPLAY_NAME + " like ?", 
       new String[]{ "%" + cc.get("contactName").toString() + "%"}, null); 

startManagingCursor(searchCursor); 
str = new String[]{Phone.DISPLAY_NAME, Phone.NUMBER}; 
ada = new SimpleCursorAdapter(this, 
           R.layout.view_contacts_listview_layout, searchCursor, 
           str, new int[] { 
             R.id.contactName, R.id.contactPhoneNo }); 

Там нет причин для доступа к вашему курсору перед отправкой его в SimpleCursorAdapter. Он автоматически будет управлять всем, что вам нужно.

Я также заметил, что вы также только выбрать контакт _ID и DISPLAY_NAME в запросе несмотря на попытки получить доступ к номеру в вашем SimpleCursorAdapter .. вы должны изменить свой прогноз, чтобы включить номер телефона .. например:

String[] projection = new String[] { BaseColumns._ID, Phone.DISPLAY_NAME, Phone.NUMBER }; 

Cursor searchCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        projection , Phone.DISPLAY_NAME + " like ?", 
        new String[]{ "%" + cc.get("contactName").toString() + "%"}, null); 
+0

Спасибо, dymmeh, так как я не заметил эту ошибку. Теперь она работает нормально, спасибо еще раз :) – kamil

+0

Рад помочь :) Отметьте это как ответ, если вы считаете, что это лучшее решение – dymmeh

+0

Конечно, dymmeh, но я не знаю, как для этого, поскольку это был мой первый вопрос, который я опубликовал. – kamil

Смежные вопросы