У меня проблема с курсором, ошибка которого я знаю, но у eNO есть подсказка, как ее решить.
Позвольте мне объяснить идею, которую я пытаюсь достичь, прежде чем погрузиться в режим кода.
У меня есть две таблицы в SQL lite.
tbl_checkpoints
_id | parent_id | название | is_checked | количество
tbl_checkpoint_answers
_id | parent_id | ответ | примечание | is_checked
Для курсора, поскольку оба столбца имеют одинаковое количество столбцов, массив, конечно, будет:
0 = _id
1 = parent_id
2 = заголовок / ответ
3 = is_checked / note
4 = количество / проверено
(до / is tbl_checkpoints, после tbl_checkpoint_answers)
Контрольная точка может иметь количество. Скажем, например, количество составляет 5.
Затем контрольный пункт должен быть проверен 5 раз. На доме, например, контрольно-пропускной пункт будет;
"Кирпич в отличном состоянии"
кирпич 1: да
кирпич 2: да
кирпич 3: нет
кирпич 4: нет
кирпич 5: да
Эти ответы принадлежат таблице table_checkpoint_answers.
Отношение один ко многим.
Одна контрольная точка может иметь несколько ответов.
Код мудрый, я использую деятельность, которая отображает форму, чтобы заполнить контрольную точку.
В форме, которая находится в макете вкладки.
У меня есть такая настройка в onCreate ()
_checkPointCursor = _dbHelper.fetchAllCheckPoints(_parentId);
//I know startManagingCursor() is deprecated. I don't know how to use the new version yet.
startManagingCursor(_checkpointCursor);
_cursor.moveToPosition(_position);
_answerCursor = _dbHelper.fetchFirstCheckPointAnswer(_checkPointCursor.getInt(0));
//getInt(0) returns 1 which is what I expect. (debugged)
Что происходит здесь, у меня есть курсор, у которого есть все контрольные точки, где parentid равен данному числу. 1 в этом случае (проверено. Принудительное значение равно 1, что не соответствует запросу, даст результаты.
Запрос, который я использую для fetchAllCheckPoints (_parentId); это:
SELECT * FROM tbl_checkpoints WHERE parent_id = parentId // parentId = 1
Это дает мне 5 результатов. Это верно и для программы, и теперь она работает нормально.
_checkpointCursor mCount равен 5 в соответствии с отладчиком.
следующий запрос; fetchFirstCheckPointAnswer (); это:
SELECT * FROM tbl_checkpointAnswers WHERE parent_id = parentId ORDER BY _id ASC LIMIT 0,1
//primary key of the selected _checkPointCursor() which is 1. so parentId = 1.
//Things going well so far..
После того, как этот запрос сработал (я проверил, используя 2 вида программного обеспечения, я получил 1 результат. Это именно то, что я хочу.
Теперь курсор имеет значение mCount = -1.
Зачем? почему mCount на _answerCursor -1?
Я уверен, что получаю результат из запроса.
программа позже вылетает при использовании:
textView.setText (_answerCursor.getString (2));
Трассировка стека:
10-19 14:10:04.651: ERROR/AndroidRuntime(12997): FATAL EXCEPTION: main10-19 14:10:04.651: ERROR/AndroidRuntime(12997): java.lang.RuntimeException: Unable to resume activity {com.wvds.activities/com.wvds.activities.TabbedCheckPointActivity}: java.lang.RuntimeException: Unable to resume activity {com.wvds.activities/com.wvds.activities.CheckPointFormActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 110-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityThread.access$2300(ActivityThread.java:125)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.os.Handler.dispatchMessage(Handler.java:99)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.os.Looper.loop(Looper.java:123)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityThread.main(ActivityThread.java:4627)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at java.lang.reflect.Method.invokeNative(Native Method)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at java.lang.reflect.Method.invoke(Method.java:521)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at dalvik.system.NativeStart.main(Native Method)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): Caused by: java.lang.RuntimeException: Unable to resume activity {com.wvds.activities/com.wvds.activities.CheckPointFormActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 110-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:170)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.LocalActivityManager.dispatchResume(LocalActivityManager.java:518)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityGroup.onResume(ActivityGroup.java:58)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.Activity.performResume(Activity.java:3823)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): ... 12 more10-19 14:10:04.651: ERROR/AndroidRuntime(12997): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 110-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at com.wvds.activities.CheckPointFormActivity.loadView(CheckPointFormActivity.java:289)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at com.wvds.activities.CheckPointFormActivity.onResume(CheckPointFormActivity.java:126)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.Activity.performResume(Activity.java:3823)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)10-19 14:10:04.651: ERROR/AndroidRuntime(12997): ... 18 more
Я надеюсь, что кто-нибудь сможет помочь мне решить эту проблему. Я с нетерпением жду ваших ответов / помощи.
Заранее спасибо.
Кстати, если у меня есть опечатки, в реальном коде опечаток нет. Не то чтобы это мешало ему работать.
Из-за ситуации, в которой я нахожусь. Я не могу использовать Интернет на своем компьютере программирования. Поэтому я использую интернет-компьютер, чтобы написать это.