CursorIndexOutOfBoundsException und dessen Interpretation

  • 5 Antworten
  • Neuester Beitrag
Diskutiere CursorIndexOutOfBoundsException und dessen Interpretation im Android App Entwicklung im Bereich Betriebssysteme & Apps.
GENiALi

GENiALi

Fortgeschrittenes Mitglied
Was bedeutet diese Fehlermeldung? Das ich zwar einen Cursor habe, aber keine Felder?
Code:
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0     
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:406)     
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)     
at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:68)     
at android.database.CursorWrapper.getInt(CursorWrapper.java:102)     
at ch.geniali.com2cal.sms.Sms.send([B]Sms.java:66[/B])     
at ch.geniali.com2cal.service.Services$2.onChange(Services.java:251)     
at android.database.ContentObserver$NotificationRunnable.run(ContentObserver.java:43)     
at android.os.Handler.handleCallback(Handler.java:605)     
at android.os.Handler.dispatchMessage(Handler.java:92)     
at android.os.Looper.loop(Looper.java:137)    
at android.app.ActivityThread.main(ActivityThread.java:4427)     
at java.lang.reflect.Method.invokeNative(Native Method)     
at java.lang.reflect.Method.invoke(Method.java:511)     
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)     
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:592)     
at dalvik.system.NativeStart.main(Native Method)
So sieht mein Code aus.

Code:
Uri uriSMSURI = Uri.parse("content://sms");
Cursor cur = context.getContentResolver().query(uriSMSURI, null, "type = 2 OR type = 1", null, " _id DESC limit 1");
cur.moveToNext();
int idPos = cur.getColumnIndex("_id");
[B]id = cur.getInt(idPos); // Line 66[/B]
Die ominöse Zeile 66 ist markiert. Meine App meldet mir ausschliesslich nur noch diesen Fehler. idPos ist nicht kleiner als 0. Das habe ich schon abgefangen. Genau aus dem Grund verstehe ich den Fehler nicht.
Wenn ich den los bin ist meine App "Fehlerlos". :biggrin:
 
Zuletzt bearbeitet:
S

swordi

Lexikon
cur.moveToNext();
int idPos = cur.getColumnIndex("_id");
id = cur.getInt(idPos); // Line 66

nur mal so ne vermutung

du sagst movetonext(), dann fragst die id ab. was wenn es aber kein Next mehr gibt? also sagen wir mal der cursor hat 0 elemente.
 
T

toomuchcoffeeman

Ambitioniertes Mitglied
Gibt moveToNext() ein TRUE zurück?

Und wo fängst Du ab, dass idPos nicht kleiner 0 ist? Hier zumindest nicht (?)
 
GENiALi

GENiALi

Fortgeschrittenes Mitglied
toomuchcoffeeman schrieb:
Gibt moveToNext() ein TRUE zurück?

Und wo fängst Du ab, dass idPos nicht kleiner 0 ist? Hier zumindest nicht (?)
Das mit dem true auf moveToNext() muss ich mir wohl mal genauer anschauen.
Weiter oben. Ich gehe raus wenn die id < 0 ist.

Der ursprüngliche Beitrag von 20:00 Uhr wurde um 20:02 Uhr ergänzt:

swordi schrieb:
nur mal so ne vermutung

du sagst movetonext(), dann fragst die id ab. was wenn es aber kein Next mehr gibt? also sagen wir mal der cursor hat 0 elemente.
Bislang ging ich davon aus das man mindestens ein moveToNext() machen muss damit man auf den ersten Record kommt. Da muss ich wohl mal noch nachlesen.
 
Punisher

Punisher

Stammgast
Bin mir net sicher ob es ein muss is da ich mir des mit einen tut beigebracht hab. Ich mach immer cursor.moveToFirst(); um auf den ersten Eintrag zu kommen. Danach frag ich mit if immer ab ob Cursor.afterLast(); ist bevor ich aus der Datenbank lese.

Keine Ahnung ob es dir hilft aber wollte auch mal meinen Senf dazu geben ;)

Gesendet von meinem Nexus 4 mit Tapatalk 2
 
T

toomuchcoffeeman

Ambitioniertes Mitglied
Ich würde auch eher mit moveToFirst() arbeiten. Wenn ich den Aufruf richtig verstehe, rufst Du doch eh maximal einen Eintrag ab? -> limit 1

Also eher
Code:
if(cur.moveToFirst()) {
// mach was
}