Android-указатель индексации границ по неизвестным причинам - PullRequest
1 голос
/ 19 октября 2011

У меня проблема с курсором, ошибка которого я знаю, но у 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

Я надеюсь, что кто-нибудь сможет помочь мне решить эту проблему. Я с нетерпением жду ваших ответов / помощи.

Заранее спасибо.

Кстати, если у меня есть опечатки, в реальном коде опечаток нет. Не то чтобы это мешало ему работать. Из-за ситуации, в которой я нахожусь. Я не могу использовать Интернет на своем компьютере программирования. Поэтому я использую интернет-компьютер, чтобы написать это.

1 Ответ

2 голосов
/ 19 октября 2011

Перед загрузкой данных добавьте cursor.movetofirst ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...