0

Я привязываю для импорта контактов и отображения их в ListView. вот мой курсор погрузчикjava.lang.IllegalStateException: не удалось переместить курсор в позицию n

 ContentResolver cr = getActivity().getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
       null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); 


     mAdapter = new ContactsAdapter(getActivity(), cur, true, null); 

     setListAdapter(mAdapter); 

И мой адаптер

for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { 
     // do what you need with the cursor here 
     String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     Log.e("name", name + "\n" + cursor.getCount()); 
     names.add(name); 

    } 
getIndexList(); 

и это мой BindView

@Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     // Gets handles to individual view resources 
     final ViewHolder holder = (ViewHolder) view.getTag(); 

     String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

    String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 


for (phoneCursor.moveToFirst(); !phoneCursor.isAfterLast(); phoneCursor.moveToNext()) { 
     // do what you need with the cursor here 

     String phoneNum = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     Log.e("phoneNum", phoneNum); 
     mCheckBox.setTag(phoneNum); 
     if (selectedNums.contains(phoneNum)) { 
      mCheckBox.setChecked(true); 
     } else { 
      mCheckBox.setChecked(false); 
     } 
    } 

Мой код аварии, когда ListView доходит до конца. Если есть 2 контакта, я получаю ошибку java.lang.IllegalStateException: не удалось переместить курсор в позицию 2 , и аналогично это так, если у меня есть n контактов. Я видел this question, но не нашел ответа. Пожалуйста, помогите

Вот журнал

------------- beginning of crash 
04-19 14:56:41.583 28188-28188/in.nuventure.com.wedding E/AndroidRuntime: FATAL EXCEPTION: main 
Process: in.nuventure.com.wedding, PID: 28188 
java.lang.IllegalStateException: couldn't move cursor to position 2 
     at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:248) 
     at android.widget.AbsListView.obtainView(AbsListView.java:2347) 
     at android.widget.ListView.makeAndAddView(ListView.java:1864) 
     at android.widget.ListView.fillDown(ListView.java:698) 
     at android.widget.ListView.fillFromTop(ListView.java:759) 
     at android.widget.ListView.layoutChildren(ListView.java:1659) 
     at android.widget.AbsListView.onLayout(AbsListView.java:2151) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1037) 
     at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:747) 
     at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:761) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
     at android.view.View.layout(View.java:15671) 
     at android.view.ViewGroup.layout(ViewGroup.java:5038) 
     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
     at android.view.Choreographer.doFrame(Choreographer.java:550) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.Acti 

04-19 14:56:47.361 28188-28200/in.nuventure.com.wedding W/CursorWrapperInner: Cursor finalized without prior close() 

here is screenshot of logcat

Я не мог найти строку ошибки отображения. это делает меня путать

+2

подсчет позиций начинается с нуля, поэтому, если у вас есть 2 позиции, то первый из них равен 0 (ноль), а второй 1 (один). Вы пытаетесь получить позицию, которой нет (в вашем случае это будет третья). – Opiatefuchs

+0

Какая строка является точной линией ошибок? – Opiatefuchs

+0

Я загрузил журнал –

ответ

2

Благодарим за помощь. Эта проблема была с getCount(). Я сделал это раньше, и я не заметил этого позже.

@Override 
    public int getCount() { 
     return names.size(); 
    } 

Я удалил это, и он отлично работает. Спасибо за помощь.

1

Просто используйте

cursor.moveToFirst(); 
while (cursor.moveToNext()){ 
    //do something 
} 

В ваш цикл вы сравниваете, если курсор не afterlast, что значение, если оно является последним, он все равно будет делать moveToNext, который Безразлично «т существуют

Или, если вы хотите придерживаться вашего для петли просто заменить

!cursor.isAfterLast() 

с

!cursor.isLast() 
Смежные вопросы