Контакты Android только с номером телефона - PullRequest
0 голосов
/ 13 августа 2011

Я создал приложение для Android под названием Location Texter . Он работает нормально, кроме случаев, когда я хочу искать контакты, я хочу, чтобы отображались только контакты с номером телефона. В настоящее время он показывает все контакты. Вот код:

public  void showContacts(Main main, Intent data) {
    Cursor cursor =  main.managedQuery(data.getData(), null, null, null, null);
    cursor.moveToNext();
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
    String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

    Cursor phones = main.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);

    while (phones.moveToNext()) {
        String phoneNo = phones.getString(phones.getColumnIndex(
                ContactsContract.CommonDataKinds.Phone.NUMBER));
        main.numbers.add(phoneNo);
    }
    main.pickPhoneNos(name);
    phones.close();
}

То, что он делает, это открывает намерение со всеми контактами. Когда один из них выбран, он возвращается к основной деятельности. Если выбранный контакт имеет более одного номера мобильного телефона, он отображает диалоговое окно с просьбой выбрать один из них. Я заметил, что с некоторыми из моих попыток диалог не появляется. Пожалуйста, скачайте приложение, если трудно понять, о чем я.

Ответы [ 2 ]

0 голосов
/ 23 августа 2011

Добавить это:

String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

if (hasPhone.equalsIgnoreCase("1"))
  hasPhone = "true";
else
  hasPhone = "false" ;

if (Boolean.parseBoolean(hasPhone)) 
{
  Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" = "+contactId,null, null);
  while (phones.moveToNext()) 
  {
    ...
  }
  ...
}
0 голосов
/ 14 августа 2011

Вам нужно быть более конкретным с вашим вопросом, трудно понять, что вы спрашиваете.Я вижу несколько проблем с кодом.

  1. Вы никогда не вызываете moveToFirst () на курсорах cursor и phones.
  2. Выникогда не проверять возвращаемое значение первого вызова moveToNext ().

Пропущенные вызовы этих функций могут привести к дальнейшим вызовам сбоя метода.

...