CursorIndexOutOfBoundsException und dessen Interpretation

GENiALi

GENiALi

Fortgeschrittenes Mitglied
11
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:
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.
 
Gibt moveToNext() ein TRUE zurück?

Und wo fängst Du ab, dass idPos nicht kleiner 0 ist? Hier zumindest nicht (?)
 
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.
 
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
 
  • Danke
Reaktionen: GENiALi
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
}
 
  • Danke
Reaktionen: GENiALi

Ähnliche Themen

Laser5001
Antworten
3
Aufrufe
327
swa00
swa00
W
Antworten
2
Aufrufe
482
rene3006
R
S
Antworten
0
Aufrufe
360
Sergio13
S
H
Antworten
2
Aufrufe
898
Hcman
H
Muecke1982
Antworten
8
Aufrufe
718
Skyhigh
Skyhigh
Zurück
Oben Unten