Index 0 requested, with a size of 0

  • 0 Antworten
  • Letztes Antwortdatum
S

soern6

Ambitioniertes Mitglied
3
Moin,

ich habe derzeit ein Problem mit meiner App. Logcat spuckt folgendes aus:

Code:
09-16 12:56:17.440  30826-30826/uni_hannover.sportapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: uni_hannover.sportapp, PID: 30826
    android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
            at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
            at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
            at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
            at uni_hannover.sportapp.CyclingMemoDataSource.cursorToCyclingMemo(CyclingMemoDataSource.java:95)
            at uni_hannover.sportapp.CyclingMemoDataSource.createCyclingMemo(CyclingMemoDataSource.java:69)
            at uni_hannover.sportapp.Cycling_Create$1.onClick(Cycling_Create.java:101)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            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.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Und zwar habe ich eine SQL DB eingerichtet und möchte die Daten in einer Activity eingeben und in einer anderen Acitivity per ListView anzeigen. Beim Eingeben in die Maske werden die Daten auch gespeichert, da ich im SQL Browser Werte angezeigt bekomme. Jedoch schmiert die App halt immer beim drücken des Create Buttons ab und zeigt die oben gezeigte Fehlermeldung an.
Da ich keinen Hinweis erhalte, wo und was der Fehler genau ist, geht meine Vermutung dahin,d ass es was mit dem Cursor zu tun hat.

Ich habe hier noch die aktivität, in welcher ich alles mit dem Cursor geregelt habe:

Code:
package uni_hannover.sportapp;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import android.content.ContentValues;
import android.database.Cursor;
import java.util.ArrayList;
import java.util.List;


public class CyclingMemoDataSource {

    private static final String LOG_TAG =
            CyclingMemoDataSource.class.getSimpleName();

    private SQLiteDatabase database;
    private CyclingMemoDBHelper dbHelper;

    private String[] columns = {
            CyclingMemoDBHelper.COLUMN_NDA,
            CyclingMemoDBHelper.COLUMN_Startpunkt,
            CyclingMemoDBHelper.COLUMN_Age,
            CyclingMemoDBHelper.COLUMN_Geschlecht,
            CyclingMemoDBHelper.COLUMN_Dauer,
            CyclingMemoDBHelper.COLUMN_Geschwindigkeit,
            CyclingMemoDBHelper.COLUMN_Streckenprofil,
            CyclingMemoDBHelper.COLUMN_Distanz

    };

    public CyclingMemoDataSource (Context context){
        dbHelper = new CyclingMemoDBHelper(context);
    }

    public void open() {
        Log.d(LOG_TAG, "Eine Referenz auf die Datenbank wird jetzt angefragt.");
        database = dbHelper.getWritableDatabase();
        Log.d(LOG_TAG, "Datenbank-Referenz erhalten. Pfad zur Datenbank: " + database.getPath());
    }

    public void close() {
        dbHelper.close();
        Log.d(LOG_TAG, "Datenbank mit Hilfe des DbHelpers geschlossen.");
    }

    public CyclingMemo createCyclingMemo(String NDA, String Startpunkt, String Age, String Geschlecht, String Dauer,
                                         String Geschwindigkeit, String Streckenprofil, String Distanz) {
        ContentValues values = new ContentValues();
        values.put(CyclingMemoDBHelper.COLUMN_NDA, NDA);
        values.put(CyclingMemoDBHelper.COLUMN_Startpunkt, Startpunkt);
        values.put(CyclingMemoDBHelper.COLUMN_Age, Age);
        values.put(CyclingMemoDBHelper.COLUMN_Geschlecht, Geschlecht);
        values.put(CyclingMemoDBHelper.COLUMN_Dauer, Dauer);
        values.put(CyclingMemoDBHelper.COLUMN_Geschwindigkeit, Geschwindigkeit);
        values.put(CyclingMemoDBHelper.COLUMN_Streckenprofil, Streckenprofil);
        values.put(CyclingMemoDBHelper.COLUMN_Distanz, Distanz);


        long insertNDA = database.insert(CyclingMemoDBHelper.TABLE_CYCLING, null, values);

        Cursor cursor = database.query(CyclingMemoDBHelper.TABLE_CYCLING,
                columns, CyclingMemoDBHelper.COLUMN_NDA + "=" + insertNDA,
                null, null, null, null);


        cursor.moveToFirst();
        CyclingMemo cyclingMemo = cursorToCyclingMemo(cursor);
        cursor.close();

        return cyclingMemo;
    }

    private CyclingMemo cursorToCyclingMemo(Cursor cursor) {


        int idNDA =
                cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_NDA);
        int idStartpunkt =
                cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Startpunkt);
        int idAge =
                cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Age);
        int idGeschlecht =
                cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Geschlecht);
        int idDauer =
                cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Dauer);
        int idGeschwindigkeit =
                cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Geschwindigkeit);
        int idStreckenprofil =
                cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Streckenprofil);
        int idDistanz =
                cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Distanz);

        String NDA = cursor.getString(idNDA);
        String Startpunkt = cursor.getString(idStartpunkt);
        String Age = cursor.getString(idAge);
        String Geschlecht = cursor.getString(idGeschlecht);
        String Dauer = cursor.getString(idDauer);
        String Geschwindigkeit = cursor.getString(idGeschwindigkeit);
        String Streckenprofil = cursor.getString(idStreckenprofil);
        String Distanz = cursor.getString(idDistanz);



        CyclingMemo cyclingMemo = new CyclingMemo(NDA, Startpunkt, Age, Geschlecht, Dauer, Geschwindigkeit, Streckenprofil, Distanz );

        return cyclingMemo;
    }

    public List<CyclingMemo> getAllCyclingMemos() {
        List<CyclingMemo> cyclingMemoList = new ArrayList<>();

        Cursor cursor = database.query(CyclingMemoDBHelper.TABLE_CYCLING,
                columns, null, null, null, null, null);

        cursor.moveToFirst();
        CyclingMemo cyclingMemo;

        while(!cursor.isAfterLast()) {
            cyclingMemo = cursorToCyclingMemo(cursor);
            cyclingMemoList.add(cyclingMemo);
            Log.d(LOG_TAG, "ID: " + cyclingMemo.getNDA() + ", Inhalt: " + cyclingMemo.toString());
            cursor.moveToNext();
        }

        cursor.close();

        return cyclingMemoList;
    }


}


Ich habe wirklich schon viel recherchiert und sämtliche Sachen getestet, bin aber nicht weitergekommen. Hoffentlich kann mir ein geschultes Auge dabei helfen, den Fehler schnell zu finden...

Danke schonmal!
 
Zurück
Oben Unten