2012-02-21 4 views
0

Я могу найти номер контакта с ее идентификатором. Следующий фрагмент печатает номер на экране.Идентификатор контакта от номера

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      CONTACT_PROJECTION,ContactsContract.CommonDataKinds.Phone._ID +" = 4627", 
      null, null); 
    phones.moveToNext(); 
    String phoneNumber = phones.getString(
      phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
    Toast.makeText(getBaseContext(), phoneNumber, Toast.LENGTH_LONG).show(); 

Однако, если я пытаюсь найти ее идентификатор из ее номера,

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      CONTACT_PROJECTION,ContactsContract.CommonDataKinds.Phone._ID +" = 4627", 
      null, null); 
    phones.moveToNext(); 
    String phoneNumber = phones.getString(
      phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      //Now I got a valid phone number 


      //using that number to find the id 
    Cursor ids = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      CONTACT_PROJECTION,ContactsContract.CommonDataKinds.Phone.NUMBER +" = "+ phoneNumber, 
      null, null); 
    ids.moveToNext(); 
    String id = ids.getString(
      ids.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID)); 
    Toast.makeText(getBaseContext(), id, Toast.LENGTH_LONG).show(); 

Я получаю следующее сообщение об ошибке.

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 

Проекция я использую следующим образом:

private static final String[] CONTACT_PROJECTION = new String[] { 
    ContactsContract.CommonDataKinds.Phone.NUMBER, 
    ContactsContract.CommonDataKinds.Phone._ID 
}; 

Второй курсор пуст, даже если я знаю, что есть такая запись в контактах. Что я делаю не так?

+0

Я помню, что есть фильтр содержимого uri для запроса по номеру телефона. –

+0

Итак, вы говорите, что: ContactsContract.CommonDataKinds.Phone.NUMBER! = ContactsContract.PhoneLookup.NUMBER (это то, что я не знаю) – 0x5f3759df

ответ

0

Не знаю, почему, но PhoneLookup работал для меня. Для тех, у кого такая же проблема, вот мой код.

Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode("aNumber")); 
Cursor phones = getContentResolver().query(contactUri , PEOPLE_PROJECTION, null, null, null); 
//here, the cursor keeps the wanted contact 

... 

private static final String[] PEOPLE_PROJECTION = new String[] { 
    ContactsContract.PhoneLookup._ID 
};