Intereting Posts
Не удается создать подписанный пакет Android через визуальную студию cordova Android parse JSONObject TextView`s LinkMovementMethod блокирует событие касания listitem Android динамически меняет стиль во время выполнения Андроид запускает пользовательскую активность на кнопке поиска нажатой @ телефонной трубки ADB не запускается (сообщение об ошибке отсутствует) Уведомление о тревоге Firebase – как показать многострочное сообщение в уведомлении Как изменить название пакета в андроид-студии? Макеты Eclipse и Android XML дают «по умолчанию» не лучшее соответствие для любой комбинации устройств / локалей » Как получить список фреймов ключевых кадров (синхронизирующих кадров) для видеофайла в Android? Результаты пользовательского кругового обнаружения в «java.lang.UnsupportedOperationException» при приостановке? Потоковое видео в VideoView работает только на Wi-Fi при использовании телефонов Samsung Комментарии пользователей не отображаются в Google Play Проблема с нижним листом Запуск службы в фоновом режиме навсегда ..? Android

Intent.ACTION_PICK возвращает пустой курсор для некоторых контактов

У меня есть приложение, в котором один аспект предназначен для того, чтобы пользователь мог выбрать контакт и отправить текст этому контакту через приложение. Приложение работает только с некоторыми контактами и не работает на других. Точнее:

Для контактов, которые я вошел в мою контактную книгу вручную, Intent.ACTION_PICK не имеет проблем с поиском и возвратом их в приложение, то есть cursor.moveToFirst() является истинным.

Но для контакта, который был импортирован Facebook (мой телефон настроен на синхронизацию с контактами Facebook), я получаю следующий android.database.CursorIndexOutOfBoundsException после того, как я нажимаю на контакт. Один вопиющий вопрос, который у меня есть: почему размер результата 0 после того, как я буквально выбрал контакт? Почему cursor.moveToFirst() false?

 ...Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.CursorWrapper.getString(CursorWrapper.java:114) 05-15 17:57:04.741: E/AndroidRuntime(21301): at com.company.Game.SendTextActivity.onActivityResult(SendTextActivity.java:118) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.app.Activity.dispatchActivityResult(Activity.java:5436) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.app.ActivityThread.deliverResults(ActivityThread.java:3188) 05-15 17:57:04.741: E/AndroidRuntime(21301): ... 11 more 

Вот мой код:

dispatchIntent:

 Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts")); pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); 

OnActivity:

 (requestCode == PICK_CONTACT_REQUEST) { // Get the URI that points to the selected contact Uri contactUri = data.getData(); // We only need the NUMBER column, because there will be only one row in the result String[] projection = { Phone.NUMBER }; // Perform the query on the contact to get the NUMBER column // We don't need a selection or sort order (there's only one result for the given URI) // CAUTION: The query() method should be called from a separate thread to avoid blocking // your app's UI thread. (For simplicity of the sample, this code doesn't do that.) // Consider using CursorLoader to perform the query. Cursor cursor = getContentResolver() .query(contactUri, projection, null, null, null); cursor.moveToFirst(); // Retrieve the phone number from the NUMBER column int column = cursor.getColumnIndex(Phone.NUMBER); String number = cursor.getString(column); //do work with number here ... } 

Примечание. Я вижу контакты. Но после того, как я выберу контакт с Facebook, я получаю крах.

BTW: Мой фрагмент кода скопирован из учебника по Android. Http://developer.android.com/training/basics/intents/result.html

Solutions Collecting From Web of "Intent.ACTION_PICK возвращает пустой курсор для некоторых контактов"

Вы не можете получить доступ к контактам FB через API контактов.

Чтобы исправить ошибку, вы должны проверить результат moveToFirst () следующим образом:

 String number = null; if (cursor.moveToFirst()) { number = cursor.getString(0); // 0 matches the index of NUMBER in your projection. } 

Чтобы изучить характер доступных вам данных, я бы передал «нуль» для проекции, чтобы все поля возвращались и выгружали имена и значения полей. Вы можете найти нужные данные, просто не в поле NUMBER.