Я получаю эту ошибку:Не удалось прочитать строку 0, col 0 из CursorWindow. (После обновления приложения)
Не удалось прочитать строку 0, столбец 0 из CursorWindow, который имеет 0 строк, 64 столбца.
, а затем следуют этой ошибки:
Не удалось прочитать строку 0, столбец 0 от CursorWindow. Перед доступом к данным убедитесь, что курсор инициализирован правильно.
Это происходит после чтения из базы данных. Вставка работ без проблем, однако чтение вызывает эту ошибку. Кроме того, это ТОЛЬКО происходит после обновления приложения. Поэтому, если вы завершите удаление/удаление приложения и переустановите его, приложение работает на 100%. Но после обновления с предыдущей версии я получаю эту ошибку.
Я считаю, что в предыдущем db возникла проблема, и это как-то не исправлено, если вы полностью не удаляете его, а просто обновляете.
Это мой onUpgrade код:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_SUBMISSIONS);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_SAMPLES);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_SETTINGS);
// Create tables again
onCreate(db);
}
И это, где я получить значения из БД:
String SUBMISSION_id = cursor.getString(SUBMISSION_FORM_Index);
Там нет ничего плохого в коде выше, так как он отлично работает в все случаи. Когда пользователь обновляет приложение, это происходит.
EDIT
Вот код, где я читаю сюда БД (Это работает хорошо, так что не Theres ничего плохого с логикой здесь ... это только дает ошибку, когда обновления пользователей из старой версии приложения)
Я удалил unneccisary код:
Cursor cursor = database.rawQuery("select * from " + TABLE_SUBMISSIONS, null);
ArrayList<String> arraylist_submission_id = new ArrayList<String>();
if(cursor.moveToFirst())
{
do
{
int SUBMISSION_IDIndex = cursor.getColumnIndex(SUBMISSION_ID);
String SUBMISSION_IDIndexentryid = cursor.getString(SUBMISSION_IDIndex);
arraylist_submission_id.add(SUBMISSION_IDIndexentryid);
}
while(cursor.moveToNext());
}
cursor.close();
И это ошибки LogCat:
12:04:04.116 23988 #23988 ERROR CursorWindow Failed to read row 0, column
0 from a CursorWindow which has 0 rows, 64 columns.
12:04:04.116 23988 #23988 ERROR AndroidRuntime FATAL EXCEPTION: main
12:04:04.116 23988 #23988 ERROR AndroidRuntime java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
12:04:04.116 23988 #23988 ERROR AndroidRuntime at android.database.CursorWindow.nativeGetString(Native Method)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at android.database.CursorWindow.getString(CursorWindow.java:438)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at com.gideon.submissions.Screen_Main.doSync_form_c(Screen_Main.java:640)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at com.gideon.submissions.Screen_Main$9.run(Screen_Main.java:386)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at android.os.Handler.handleCallback(Handler.java:615)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:92)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at android.os.Looper.loop(Looper.java:137)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:4947)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:511)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
12:04:04.116 23988 #23988 ERROR AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
EDIT 2:
Вот код из строки 640
String SUBMISSION_FORM_C_IDid = cursor.getString(SUBMISSION_FORM_C_IDIndex);
если я игнорировать эту строку и удалить его, он просто дает ту же ошибку на следующей строке.
Снова этот код работает без ошибок, проблема возникает только после обновления.
РЕДАКТИРОВАТЬ 3:
Вот код, что выше (строка 640) является частью ... Я удалил unneccissary код:
databaseHelper = new Handler_Database(this);
Cursor cursor = databaseHelper.getAllUnsyncedSubmissions();
String SUBMISSION_FORM_C_ID = "id";
//Retrieve data from DB for each entry that is not synced.
if(cursor.moveToFirst())
{
Session.arraylist_submission_c_id = new ArrayList<String>();
do
{
int SUBMISSION_FORM_C_IDIndex = cursor.getColumnIndex(SUBMISSION_FORM_C_ID);
String SUBMISSION_FORM_C_IDid = cursor.getString(SUBMISSION_FORM_C_IDIndex);
Session.arraylist_submission_c_id.add(SUBMISSION_FORM_C_IDid);
}
while(cursor.moveToNext());
}
else
{
//other code
}
cursor.close();
databaseHelper.close();
показать код, где вы читаете данные из базы данных. –
Код в вашем обновлении не соответствует коду, который вы опубликовали ранее. Что находится на строке «Screen_Main.java» 640 - вот в чем проблема. – laalto
см редактирования, благодаря – Janpan