Селектор контактов не обеспечивает ожидаемых результатов в Android Studio - PullRequest
1 голос
/ 20 июня 2020

У меня есть довольно простой фрагмент кода для получения контактной информации из средства выбора, но он не дает ожидаемых результатов. Я получаю имя контакта, но не номер. По какой-то причине курсор возвращает индекс -1 (Причина сбоя приложения). Я могу гарантировать, что у контакта заполнено числовое поле. Я не могу точно определить причину этой ошибки. 1006 * Ошибка выглядит следующим образом:

Process: com.example.smssender, PID: 29366
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/745i7546045a8e2cb2bf.3789r1632-29294B4F39.847r1845-29294B4F39/1851 flg=0x1 (has extras) }} to activity {com.example.smssender/com.example.smssender.MainActivity}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4610)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4652)
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7050)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
     Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
        at android.database.CursorWindow.nativeGetString(Native Method)
        at android.database.CursorWindow.getString(CursorWindow.java:465)
        at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
        at android.database.CursorWrapper.getString(CursorWrapper.java:137)
        at com.example.smssender.MainActivity.onActivityResult(MainActivity.kt:54)
        at android.app.Activity.dispatchActivityResult(Activity.java:7762)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4603)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4652) 
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7050) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965) 

1 Ответ

0 голосов
/ 30 июня 2020

Если вас интересует номер телефона контакта, вы должны использовать «средство выбора телефона», а не «средство выбора контактов».

Это средство выбора попросит пользователя выбрать контакт>, а затем номер телефона, принадлежащий этому контакту.

Вот код:

Intent intent = Intent(Intent.ACTION_PICK);
intent.setType(CommonDataKinds.Phone.CONTENT_TYPE); // Note the Phone type
startActivityForResult(intent, PICKCONTACT);

А вот как получить информацию из намерения onActivityResult:

Uri dataUri = data.getData();
String[] projection = new String[]{CommonDataKinds.Phone.NUMBER};
Cursor cursor = getContentResolver().query(dataUri, projection, null, null, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...