Как показать список контактов Android

#android

#Android

Вопрос:

когда я нажимаю кнопку показать, это ошибка. Но я дал разрешение контактам.

В чем проблема, я не могу понять.

Журнал ошибок :

 07-02 10:29:06.262: E/AndroidRuntime(3135): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 2
07-02 10:29:06.262: E/AndroidRuntime(3135):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:424)
07-02 10:29:06.262: E/AndroidRuntime(3135):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
07-02 10:29:06.262: E/AndroidRuntime(3135):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
07-02 10:29:06.262: E/AndroidRuntime(3135):     at android.database.CursorWrapper.getString(CursorWrapper.java:114)
07-02 10:29:06.262: E/AndroidRuntime(3135):     at com.example.contentprovidernew_ahsanul.MainActivity.displayContracts(MainActivity.java:74)
  

Мой полный код

Комментарии:

1. используйте cursor.moveToFirst() перед do while in displayContracts (строка 73) и разместите свой код здесь вместо того, чтобы размещать ссылку на свой код

2. с помощью intent также можно просмотреть список контактов .. попробуйте tht

Ответ №1:

Попробуй это…

 if(cursor!=null amp;amp; cursor.getCount()>0){
cursor.moveToFirst(); // add this : moves to first 
            do{
                String id=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                 int hasphoneNumber=Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));

                 if(hasphoneNumber>0){
                     Cursor phCursor=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID "=?", new String[]{id}, null);
                     if(phCursor!=null amp;amp; phCursor.getCount()>0){
                        phCursor.moveToFirst();
                         do{
                             String phoneNumber=phCursor.getString(phCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                             Toast.makeText(getApplicationContext(), phoneNumber " "  name, Toast.LENGTH_LONG).show();
                         }while(phCursor.moveToNext());// change here : use moveToNext()
                     }
                     phCursor.close();
                 }

            }while(cursor.moveToNext());
        }
  

Комментарии:

1. вам нужно изменить while(phCursor.moveToFirst()) на while(phCursor.moveToNext()) тоже, как сказал Терро

2. он получает сообщение об ошибке в строке: 74, и я ввел свой код раньше: строка с номером 74

3. да, ваш код исправил первую проблему OP, но этот код имеет неограниченный цикл получения номера, как я уже сказал, потому что phCursor.moveToFirst() всегда верно

Ответ №2:

В строке 86 я думаю, что это проблема.

Изменить:

                     phCursor.moveToFirst();
                     do{
                         String phoneNumber=phCursor.getString(phCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                         Toast.makeText(getApplicationContext(), phoneNumber " "  name, Toast.LENGTH_LONG).show();

                     }while(phCursor.moveToFirst());
  

Для:

                     phCursor.moveToFirst();
                     do{
                         String phoneNumber=phCursor.getString(phCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                         Toast.makeText(getApplicationContext(), phoneNumber " "  name, Toast.LENGTH_LONG).show();
                     }while(phCursor.moveToNext());
  

Комментарии:

1. чем это отличается??

2. Это пока (phCursor.moveToNext());