android.database.CursorIndexOutOfBoundsException:请求索引8,大小为8

时间:2016-07-05 09:16:32

标签: java android sqlite android-sqlite

我遇到以下问题,任何帮助都会非常有用(我总是赞成):

由于某些原因,我的代码记录了我认为应该在两组中完成的工作分为六组并且给我一个错误。

这是我的代码:

  package com.nxstudio.suratbus;

    import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

/**
 * Created by rahul on 7/5/2016.
 */
public class DBHelper {

public void insert_coordinates(Context context){

    try {

        SQLiteDatabase eventsDB = context.openOrCreateDatabase("Coordinates", Context.MODE_PRIVATE, null);

        eventsDB.execSQL("CREATE TABLE IF NOT EXISTS coordinates (latitude VARCHAR,longitude VARCHAR,station VARCHAR)");

        eventsDB.execSQL("INSERT INTO coordinates (latitude, longitude ,station) VALUES ('1', '1','Station1')");

        eventsDB.execSQL("INSERT INTO coordinates (latitude, longitude ,station) VALUES ('2', '2','Station2')");

        Cursor c = eventsDB.rawQuery("SELECT * FROM coordinates", null);

        int latIndex = c.getColumnIndex("latitude");
        int longIndex = c.getColumnIndex("longitude");
        int stationIndex = c.getColumnIndex("station");

        if (c != null && c.moveToFirst()){

        while (c != null) {

            Log.i("lat", c.getString(latIndex));
            Log.i("long", Integer.toString(c.getInt(longIndex)));
            Log.i("Station", Integer.toString(c.getInt(stationIndex)));

            c.moveToNext();
        }
    }


    }
    catch (Exception e) {

        e.printStackTrace();

    }



}




}

这是我的日志:

    07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/lat: 1
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/long: 1
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/Station: 0
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/lat: 2
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/long: 2
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/Station: 0
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/lat: 1
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/long: 1
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/Station: 0
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/lat: 2
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/long: 2
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/Station: 0
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/lat: 1
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/long: 1
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/Station: 0
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/lat: 2
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/long: 2
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/Station: 0
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/lat: 1
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/long: 1
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/Station: 0
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/lat: 2
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/long: 2
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus I/Station: 0
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err: android.database.CursorIndexOutOfBoundsException: Index 8 requested, with a size of 8
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:432)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at com.nxstudio.suratbus.DBHelper$override.insert_coordinates(DBHelper.java:35)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at com.nxstudio.suratbus.DBHelper$override.access$dispatch(DBHelper.java)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at com.nxstudio.suratbus.DBHelper.insert_coordinates(DBHelper.java:0)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at com.nxstudio.suratbus.MainActivity.onCreate(MainActivity.java:75)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.app.Activity.performCreate(Activity.java:5245)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2249)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3740)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.app.ActivityThread.access$900(ActivityThread.java:141)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.os.Looper.loop(Looper.java:136)
07-05 14:38:05.512 20886-20886/com.nxstudio.suratbus W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5052)
07-05 14:38:05.522 20886-20886/com.nxstudio.suratbus W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
07-05 14:38:05.522 20886-20886/com.nxstudio.suratbus W/System.err:     at java.lang.reflect.Method.invoke(Method.java:515)
07-05 14:38:05.522 20886-20886/com.nxstudio.suratbus W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-05 14:38:05.522 20886-20886/com.nxstudio.suratbus W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
07-05 14:38:05.522 20886-20886/com.nxstudio.suratbus W/System.err:     at dalvik.system.NativeStart.main(Native Method)

提前致谢

3 个答案:

答案 0 :(得分:1)

试试这个:

while (c.moveToNext();) {
        Log.i("lat", c.getString(latIndex));
        Log.i("long", Integer.toString(c.getInt(longIndex)));
        Log.i("Station", Integer.toString(c.getInt(
    }

https://developer.android.com/reference/android/database/Cursor.html#moveToNext()

这将阻止光标越过最后一个条目

答案 1 :(得分:1)

要修复崩溃,请替换

while (c != null) {
    //...
    c.moveToNext();
}

与例如

do {
     //...
} while (c.moveToNext());

这样当没有更多结果时你的循环就会终止。

对于"两套完成六套"问题是,您可以在DROP TABLE IF EXISTS coordinates之前添加CREATE TABLE,以删除包含较旧数据的旧表。

答案 2 :(得分:0)

您的光标没有索引8,因此您获得CursorIndexOutOfBoundsException
因此,在从此索引获取值之前,应检查游标是否包含此索引

 do {
     if (mCursor.getCount() > latIndex && mCursor.getCount() > longIndex && mCursor.getCount() > stationIndex) {
         Log.i("lat", c.getString(latIndex));
         Log.i("long", Integer.toString(c.getInt(longIndex)));
         Log.i("Station", Integer.toString(c.getInt(stationIndex)));
     }
 } while (c.moveToNext());