Инициализация курсора Android

#android #database #sqlite #cursor

#Android #База данных #sqlite #курсор

Вопрос:

У меня очень странная проблема, которую пока не удалось решить.

 Caused by: java.lang.IllegalStateException: Couldn't read row 9, col 1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
  

Я искал похожие сообщения, но все равно не смог найти никакого решения.

У меня есть некоторые данные, Sqlite и когда я пытаюсь их получить, у меня есть это error .

Вот мой code способ извлечения data :

 public static ArrayList<DetailsItemI> selectDetailsWithRecId(long recId) {
    int tabId;
    String tag, value;
    String selection = DBHelper.DETAILS_REC_ID   " = "   recId;
    Cursor c = db.query(DBHelper.DETAILS_TABLE, null, selection, null, null, null, DBHelper.DETAILS_TAB_ID   " ASC");
    ArrayList<DetailsItemI> list = new ArrayList<DetailsItemI>();
    DetailsItemI inputItem;

if (c.moveToFirst()) {
    do {
            tabId = c.getInt(c.getColumnIndex(DBHelper.DETAILS_TAB_ID));
            tag = c.getString(c.getColumnIndex(DBHelper.DETAILS_VIEW_PARAMETER));
            value = c.getString(c.getColumnIndex(DBHelper.DETAILS_VALUE));

            inputItem = new DetailsItem(tabId, tag, value);
            list.add(inputItem);
    } while (c.moveToNext());
}
return list;
}
  

Column count in cursor равен 4, поэтому проблема не должна быть в этом. Я думаю, что это row проблема, но понятия не имею, почему.

Заранее спасибо за помощь.

Полная трассировка стека:

 06-30 13:39:17.763    1033-1033/ge.altasoft.datacollector E/CursorWindow﹕ Failed to read row 9, column 1 from a CursorWindow which has 9 rows, 4 columns.
06-30 13:39:17.768    1033-1033/ge.altasoft.datacollector E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{ge.altasoft.datacollector/ge.altasoft.datacollector.DetailsActivity}: java.lang.IllegalStateException: Couldn't read row 9, col 1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
            at android.app.ActivityThread.access$700(ActivityThread.java:140)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4921)
            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:1038)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: Couldn't read row 9, col 1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
            at android.database.CursorWindow.nativeGetLong(Native Method)
            at android.database.CursorWindow.getLong(CursorWindow.java:511)
            at android.database.CursorWindow.getInt(CursorWindow.java:578)
            at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:69)
            at ge.altasoft.database.DBManager.selectDetailsWithRecId(DBManager.java:358)
            at ge.altasoft.datacollector.DetailsActivity.fillTheData(DetailsActivity.java:278)
            at ge.altasoft.datacollector.DetailsActivity.initViews(DetailsActivity.java:71)
            at ge.altasoft.datacollector.DetailsActivity.onCreate(DetailsActivity.java:62)
            at android.app.Activity.performCreate(Activity.java:5188)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
            at android.app.ActivityThread.access$700(ActivityThread.java:140)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4921)
            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:1038)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
            at dalvik.system.NativeStart.main(Native Method)
  

ОТРЕДАКТИРОВАНО

У app меня много fields того, что должно быть заполнено. Я сохраняю их все как strings . Некоторые из fields Image Fields них, и я save те images , как Base64 Strings .

На одном tab у меня есть 3 Image Fields , и это error происходит во время извлечения третьего image field , но это происходит только с 3 specific image combination . Понятия не имею, почему.

Комментарии:

1. для чего вам нужен метод selectDetailsWithRecId()?

2. Пожалуйста, опубликуйте полную трассировку стека.

3. selectDetailsWithRecId() предназначен для получения сохраненных данных.

4. @laalto я добавил полную трассировку стека

5. скорее всего, вы не используете SimpleCursorAdapter, почему?