0

Ich bin dabei, Kontakte zu importieren und sie in einem ListView anzuzeigen. hier ist mein Cursor loaderjava.lang.IllegalStateException: konnte den Cursor nicht an die Position n bewegen

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

Und mein Adapter ist

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

und das ist mein BindViews

@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); 
     } 
    } 

Mein Code stürzt ab, wenn ListView bis zum Ende erreicht. Wenn es 2 Kontakte gibt, bekomme ich einen Fehler java.lang.IllegalStateException: konnte den Cursor nicht auf Position 2 bewegen und in ähnlicher Weise ist dies der Fall, wenn ich n Kontakte habe. Ich habe this question gesehen, konnte aber keine Antwort finden. Bitte helfen

Hier das Protokoll ist

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

ich nicht die Fehlerzeile angezeigt finden konnten. das macht mich verwirrt

+2

Positionszählung beginnt bei der Nummer Null, wenn Sie also 2 Positionen haben, dann ist die erste 0 (Null) und die zweite 1 (eins). Du versuchst eine Position zu bekommen, die es nicht gibt (in deinem Fall wird es die dritte sein). – Opiatefuchs

+0

Welche Zeile ist die genaue Fehlerzeile? – Opiatefuchs

+0

Ich habe das Log –

Antwort

2

Danke für Ihre Hilfe. Dieses Problem war mit der getCount(). Ich habe das vorher gemacht und ich habe es später nicht bemerkt.

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

Ich entfernte das und es funktioniert gut. Vielen Dank für Ihre Hilfe

1

Verwenden Sie einfach

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

In Ihrer for-Schleife Sie vergleichen, wenn der Cursor nicht Afterlast ist, dass Sinn, wenn es das letzte ist, wird es noch die MoveToNext tun, die doesn ‚t

existieren oder wenn Sie mit Ihrer for-Schleife ersetzen Sie einfach kleben wollen

!cursor.isAfterLast() 

mit

!cursor.isLast()