2014-02-16 2 views
2

Раньше я использовал контент-резольвер, чтобы получить список контактов и их данные, пока он работает. Я хотел попробовать метод Loader, который запрашивает контент-провайдера в фоновом режиме. Я посмотрел на документацию и примеры кода здесь:Телефонный номер телефона Android с помощью Loader Недопустимый столбец data1

http://developer.android.com/training/contacts-provider/retrieve-details.html

В то время как я был в состоянии отобразить список контактов без каких-либо проблем, я застрял на ВОССТАНОВЛЕНИЕ номер телефона конкретного контакта щелкать его и показывая это на подробном экране. Демонстрация выше показывает адрес пользователя на экране подробностей, я даже пытался его изменить. Я изменил содержание URI из списка контактов, чтобы ContactsContract.CommonDataKinds.Phone, но я получаю

java.lang.IllegalArgumentException: Invalid column data1 

Существует не один подробный учебник в Интернете, показывая, как это делается. Может ли кто-то здесь быть достаточно любезен, чтобы пролить свет? Читая различные другие вопросы, связанные с Stackoverflow, я уверен, что он имеет какое-то отношение к 2-мя различным URI CONTENT, но опять-таки я ошибаюсь. Любая помощь или указатели будут действительно оценены. Благодаря

Немногие из SO Вопросы я уже смотрел на:

Get phone number from contact loader in android: projection crash

Logcat says "invalid column data1"

How to get contacts' phone number in Android

Obtaining phone number from lookup URI

Ни один из них не решить мою проблему. Вот соответствующий код, где он не:

 final static String[] PROJECTION = { 
      Contacts._ID, 
      Utils.hasHoneycomb() ? ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY : ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME 
      //ContactsContract.CommonDataKinds.Phone.NUMBER, 
    }; 

код работает просто отлично, но в тот момент я удалить комментарий, чтобы принести номер телефона он не

ответ

0

Это отрывок из того, что я на самом деле в моем (рабочий) код.

Это мой соответствующий импорт:

import android.provider.ContactsContract; 
import android.provider.ContactsContract.CommonDataKinds.Email; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.provider.ContactsContract.Contacts; 

Учитывая, что идентификатор является строкой (представляющее число, как "1", "20", ...)

// Query for phone numbers for the selected contact id 
final Cursor cur = getContentResolver().query 
    (
    Phone.CONTENT_URI, null, 
    Phone.CONTACT_ID + "=?", 
    new String[] {id}, null 
    ); 

final int phoneIdx = cur.getColumnIndex(Phone.NUMBER); 
final int phoneType = cur.getColumnIndex(Phone.TYPE); 

// ... 

    if(cur.moveToFirst()) 
    { 
     final String name = 
      cur.getString 
      (
       cur.getColumnIndexOrThrow 
       (
        ContactsContract.Contacts.DISPLAY_NAME 
       ) 
      ); 
    } 

Надеется, что это ставит вас на правильный путь

4

В моем случае проблема была в URI.

Я использовал это:

Uri uri = ContactsContract.Contacts.CONTENT_URI; 

и я изменил для этого (Phone.CONTENT_URI), чтобы решить эту проблему и получить номер телефона:

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 

Это остальные код:

contactos = (TextView) findViewById(R.id.contactos); 

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 

String [] projection = new String[] { 
       ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.NUMBER 
     }; 

Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 

while (cursor.moveToNext()){ 
      String nombre = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); 
      String telefono = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      contactos.append("Name: "); 
      contactos.append(nombre); 
      contactos.append(" - Phone Number: "); 
      contactos.append(telefono); 
      contactos.append("\n"); 
     } 
+0

Casariedo Спасибо, это спасло меня много времени! – JPerk

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