GDX SQLite android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为1

GDX SQLite android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为1,sqlite,android-studio,libgdx,cursor,Sqlite,Android Studio,Libgdx,Cursor,我在Android工作室与和一起工作。我想用下面的代码从我的数据库中进行一个简单的查询 try { cursorSettings = dbHandler.rawQuery("SELECT "+COLUMN_SETTING+" FROM "+TABLE_SETTINGS+" WHERE "+COLUMN_SETTINGSID+" =13"); System.out.println(cursorSettings.getLong(0)); } catch (S

我在Android工作室与和一起工作。我想用下面的代码从我的数据库中进行一个简单的查询

 try {
        cursorSettings = dbHandler.rawQuery("SELECT "+COLUMN_SETTING+" FROM "+TABLE_SETTINGS+" WHERE "+COLUMN_SETTINGSID+" =13");
        System.out.println(cursorSettings.getLong(0));
    } catch (SQLiteGdxException e) {
        e.printStackTrace();
    }
桌面版本工作正常,但在android版本中,我遇到以下错误:

05-25 10:21:47.341 11978-12232/ch.shuttering.rapporte E/AndroidRuntime: FATAL EXCEPTION: GLThread 82275
    Process: ch.shuttering.rapporte, PID: 11978
    android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
        at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
        at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
        at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
        at com.badlogic.gdx.sqlite.android.AndroidCursor.getLong(AndroidCursor.java:61)
        at ch.shuttering.rapporte.Manager.SQLiteManager.SaveMangerSQLite.creatSQLiteSettings(SaveMangerSQLite.java:295)
        at ch.shuttering.rapporte.RapporteMain.create(RapporteMain.java:66)
        at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:311)
        at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1546)
        at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1262)
因此,每次从游标执行getXXX查询时,我都会得到一个错误,但如果我现在使用以下代码:

 try {
        cursorSettings = dbHandler.rawQuery("SELECT * FROM "+TABLE_SETTINGS);
    } catch (SQLiteGdxException e) {
        e.printStackTrace();
    }
    while (cursorSettings.next()) {
        Gdx.app.log("FromDb", String.valueOf(cursorSettings.getString(1)));
    }
我有一个正确的输出与所有数据。 有人知道问题出在哪里吗?
谢谢你的帮助

好的,我自己发现了问题,那是Android类中的代码

@Override
        public long getLong (int columnIndex) {
            try { 
                return cursor.getLong(columnIndex);
            } catch (SQLiteException e) {
                Gdx.app.log(DatabaseFactory.ERROR_TAG, "There was an error in getting the long", e);
                throw new SQLiteGdxRuntimeException(e);
            }
        }
问题是,在android中,光标指向-1,因此必须首先将其设置为正确的位置,下面的代码解决了这个问题

@Override
    public long getLong (int columnIndex) {
        try {
           cursor.moveToFirst();
            return cursor.getLong(columnIndex);
        } catch (SQLiteException e) {
            Gdx.app.log(DatabaseFactory.ERROR_TAG, "There was an error in getting the long", e);
            throw new SQLiteGdxRuntimeException(e);
        }
    }
您可以在AndroidCursor类的库gdx-sqlite-android.jar中找到这段代码

我希望这个解决方案对某人有所帮助