Vermisstes Datenbankfeld

  • Hallo

    In letzter Zeit häufen sich die Feldermeldungen in bezug auf ein Datenbankfeld das es offensichltich nicht bei allen Androiden gibt. Konktet bei einem Galaxy Note GT-N7000. Hat jemand soeines? Ich habe "nur" ein SIII und ein LG Optimus 3D.

    Fehler kommt bei der Abfrage nach dem Feld protocol.

    Java
    Uri uriSMSURI = Uri.parse("content://sms");
    
    
    Cursor cur = context.getContentResolver().query(uriSMSURI, null, null, null, "_id DESC limit 1");
    cur.moveToNext();
    String protocol = null;
    
    
    protocol = cur.getString(cur.getColumnIndex("protocol"));

    android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:400)
    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.SendSms.send(SendSms.java:56)
    at ch.geniali.com2cal.service.OutgoingSms$1.onChange(OutgoingSms.java:60)
    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:4511)
    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:986)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:753)
    at dalvik.system.NativeStart.main(Native Method)


    Wie kann ich generell solche Fehler vermeiden? Geht das überhaupt oder muss ich das akzeptieren und bei einem Auftretten eine Lösung suchen?

  • Offensichtlich findet die Abfrage kein Ergebnis, der Cursor ist leer:

    Zitat

    Index 0 requested, with a size of 0


    Ich verarbeite meine Datenbankabfragen meistens in einer while-Schleife (bei "limit 1" reicht auch if...):

    Java
    Cursor cur = context.getContentResolver().query(uriSMSURI, null, null, null, "_id DESC limit 1");
    String protocol = null;
    while (cur.moveToNext()) {
    	protocol = cur.getString(cur.getColumnIndex("protocol"));
    	// weitere Bearbeitung
    }


    Wenn nix im Cursor ist, wird auch nix gemacht, ansonsten werden alle Ergebnins-Einträge abgearbeitet. B-)

    Das Leben kann so hart sein, man muss nur richtig wollen!!!

  • Danke für die Antwort.
    In zwischen bin ich schlauer. Das Feld protocol scheint Herstellerspezifisch zu sein. Gibts nicht überall. Musste einfach das Feld type nehmen, was eigentlich korrekt wäre, um zu ermitteln ob ein SMS ein gesendetes, empfangenes oder ein draft ist.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!