0

Je suis en train d'importer des contacts et de l'afficher dans un ListView. ici est mon curseur chargeurjava.lang.IllegalStateException: impossible de déplacer le curseur sur la position 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); 

Et mon adaptateur est

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(); 

et ceci est mon 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); 
     } 
    } 

plantage de mon code lorsque ListView atteint la fin. S'il y a 2 contacts, je reçois erreur java.lang.IllegalStateException: impossible de déplacer le curseur à la position 2 et de même, c'est le cas si j'ai n contacts. J'ai vu this question mais je n'ai pas trouvé de réponse. S'il vous plaît aider

Voici le journal

------------- 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

Je ne pouvais pas trouver la ligne d'erreur affiché. cela me fait confus

+2

le comptage de position commence au numéro zéro, donc si vous avez 2 positions, alors le premier est 0 (zéro) et le second 1 (un). Vous essayez d'obtenir une position qui n'est pas là (dans votre cas, ce sera le troisième). – Opiatefuchs

+0

quelle ligne est la ligne d'erreur exacte? – Opiatefuchs

+0

J'ai téléchargé le journal –

Répondre

2

Merci pour votre aide. Ce problème était avec le getCount(). Je l'ai fait avant et je ne l'ai pas remarqué plus tard.

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

J'ai enlevé ceci et cela fonctionne très bien. Merci pour votre aide

1

Il suffit d'utiliser

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

Dans votre boucle que vous comparez si le curseur n'est pas AfterLast, cette signification, si elle est le dernier, il fera encore l'MoveToNext, qui doesn « existe

Ou si vous voulez coller avec votre boucle il suffit de remplacer

!cursor.isAfterLast() 

avec

!cursor.isLast()