CursorIndexOutOfBoundsException проблема: Индекс 4 запрошен, с размером 4 - PullRequest
1 голос
/ 23 августа 2011

Я хочу отобразить для каждого производителя AlertDialog, который имеет некоторое описание, для этого я использую этот код:

protected boolean onTap(int index) {
            db = openHelper.getWritableDatabase();

            String[] result_columns = new String[] {COL_DESCRI};

            Cursor cur = db.query(true, TABLE_COORD, result_columns,
             null, null, null, null, null, null);

                 cur.moveToPosition(index);
                String description = cur.getString(cur.getColumnIndexOrThrow("description"));

                AlertDialog.Builder dialog = new AlertDialog.Builder(Geo.this);
                dialog.setTitle("Infos.");
                dialog.setMessage(description);
                dialog.setPositiveButton("OK", new OnClickListener() {    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                dialog.show();

                //cur.moveToNext();

             cur.close();
             db.close();

            return true;
        }

Проблема в том, что есть некоторые маркеры, что результат alerttdialog является правильным,и есть некоторые другие, которые, когда я нажимаю на это, у меня есть ФК.Logcat:

08-23 17:41:37.531: ERROR/AndroidRuntime(10004): Uncaught handler: thread main exiting due to uncaught exception
08-23 17:41:37.550: ERROR/AndroidRuntime(10004): android.database.CursorIndexOutOfBoundsException: Index 4 requested, with a size of 4
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at carburant.android.com.Geo$ItemizedOverlayPerso.onTap(Geo.java:244)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:346)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.view.GestureDetector.onTouchEvent(GestureDetector.java:506)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at com.google.android.maps.MapView.onTouchEvent(MapView.java:628)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.view.View.dispatchTouchEvent(View.java:3709)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.os.Looper.loop(Looper.java:123)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at android.app.ActivityThread.main(ActivityThread.java:4363)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at java.lang.reflect.Method.invokeNative(Native Method)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at java.lang.reflect.Method.invoke(Method.java:521)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-23 17:41:37.550: ERROR/AndroidRuntime(10004):     at dalvik.system.NativeStart.main(Native Method)

Когда я ставлю cur.moveToPosition(index); под String description = cur.getString(cur.getColumnIndexOrThrow("description"));, у меня есть Index -1 requested, with a size of 4 в противном случае, как выше код Index 4 requested, with a size of 4

Ответы [ 3 ]

3 голосов
/ 23 августа 2011

Индексирование массива начинается с 0, а не 1.Ваш четвертый элемент хранится в индексе 3.

Когда я помещаю cur.moveToPosition (index);под String description = cur.getString (cur.getColumnIndexOrThrow ("description"));у меня запрошен индекс -1 с размером 4, в противном случае, как указано выше, запрошен код 4 индекса с размером 4

Когда набор строк будет возвращен в первый раз, курсор будет в положении -1, что перед первым рядом.

1 голос
/ 07 декабря 2012

сразу после звонка
Cursor cur = db.query(true, TABLE_COORD, result_columns, null, null, null, null, null, null);

ваш курсор будет в положении -1, и это исключение придет, если вы извлекаете данные, когда курсор находится в индексе -1. ​​
когда вы впервые вызываете cur.moveToPosition(index-1);, значение индекса может быть равно 0, то есть вопрос.

0 голосов
/ 23 августа 2011

Ошибка, конечно, в коде String description = cur.getString(cur.getColumnIndexOrThrow("description"));, потому что у вас нет такого столбца. У вас есть только столбец COL_DESCRI, который, вероятно, не соответствует «описанию»

...