0

I am using android and sqlite database, I want to get data from colum nomMission this is what I have done but it is not working

 public List<Missions> getMissions() {
    List<Missions> mission = new ArrayList<Missions>();

    Cursor cursor = mDb.rawQuery("select nomMission from Missions", null);

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        Missions missionss = cursorToMission(cursor);
        mission.add(missionss);
        cursor.moveToNext();
    }
    // make sure to close the cursor
    cursor.close();
    return mission;
}

private Missions cursorToMission(Cursor cursor) {
    Missions missions = new Missions(null, null);
    missions.setNomMission(cursor.getString(1));
    missions.setDateMission(cursor.getString(2));
    return missions;
}

Error Log:

04-29 16:04:52.347: E/AndroidRuntime(4864): FATAL EXCEPTION: main
04-29 16:04:52.347: E/AndroidRuntime(4864): java.lang.RuntimeException: Unable to start activity ComponentInfo{tn.pfe.ybn.sigl/tn.pfe.ybn.sigl.DataManip.MissionAct}: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2077)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread.access$600(ActivityThread.java:134)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.os.Looper.loop(Looper.java:154)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread.main(ActivityThread.java:4624)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at java.lang.reflect.Method.invokeNative(Native Method)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at java.lang.reflect.Method.invoke(Method.java:511)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at dalvik.system.NativeStart.main(Native Method)
04-29 16:04:52.347: E/AndroidRuntime(4864): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

2 Answers 2

1

Because your cursor actually contains only a column.
Which index is 0 (table columns are 0 based).

You specify:

Cursor cursor = mDb.rawQuery("select nomMission from Missions", null);

(one column)

But then you try to access

missions.setNomMission(cursor.getString(1));
missions.setDateMission(cursor.getString(2));

In your case, you can only access:

missions.setNomMission(cursor.getString(0));

or, better,

missions.setNomMission(cursor.getString(cursor.getColumnIndex("nomMission")));

Here you refer the column(s) by name, not by index

Sign up to request clarification or add additional context in comments.

1 Comment

i changed it but i always have the same problem
0

If your query only selects one column, it will only return one column with an index of 0. The way it is now, you can call cursor.getString(0) and that's really it. If you want to get NomMission and DateMission, you should call

`Cursor cursor = mDB.rawQuery("SELECT nomMission AND dateMission FROM Missions",null);

Personally, I prefer to use the SQLiteDatabase's query method here.

For you, that would look like

Cursor cursor = mDb.query("Missions, new String[]{"nomMission", "dateMission"},null, null, null, null, null, null);

I'm also a noob, so anybody feel free to correct anything.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.