2014-06-27 2 views
0

Я получаю эту ошибку:Не удалось прочитать строку 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(); 
+1

показать код, где вы читаете данные из базы данных. –

+0

Код в вашем обновлении не соответствует коду, который вы опубликовали ранее. Что находится на строке «Screen_Main.java» 640 - вот в чем проблема. – laalto

+0

см редактирования, благодаря – Janpan

ответ

0

Failed to read row 0, column 0 from a CursorWindow which has 0 rows, 64 columns.

Курсор не содержит каких-либо строк.

Проверьте возвращаемое значение moveTo...(), чтобы убедиться, что курсор указывает на допустимую строку перед попыткой считывания значений.

+0

То есть, Что так странно для меня, потому что я это делаю, если (cursor.moveToFirst()) { сделать { – Janpan

+0

Пожалуйста отправьте соответствующий код вместе с полным StackTrace, чтобы получить больше помощи с этим. – laalto

+0

см. Мое редактирование, thx – Janpan

Смежные вопросы