#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 indisplayContracts
(строка 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());