Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 混淆游标索引越界异常_Java_Android_Database_Sqlite_Cursor - Fatal编程技术网

Java 混淆游标索引越界异常

Java 混淆游标索引越界异常,java,android,database,sqlite,cursor,Java,Android,Database,Sqlite,Cursor,我有一个包含游戏级别和阶段的数据库,问题是每次我在代码中调用方法getId(),getLevel()或getStage(),它只是抛出CursorIndexOutOfBoundsException。我的数据库有5个索引,但它告诉我只有0个索引可用。代码如下: 数据库帮助器类: public class DatabaseGame extends SQLiteOpenHelper { private static final String DATABASE_NAME = "DB2.db"; pri

我有一个包含游戏级别和阶段的数据库,问题是每次我在代码中调用方法
getId()
getLevel()
getStage()
,它只是抛出
CursorIndexOutOfBoundsException
。我的数据库有5个索引,但它告诉我只有0个索引可用。代码如下:

数据库帮助器类

public class DatabaseGame extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "DB2.db";
private static final int SCHEMA_VERSION = 6;

public DatabaseGame(Context context) {
    super(context, DATABASE_NAME, null, SCHEMA_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE save_progress (ID INTEGER PRIMARY KEY NOT NULL, LEVEL VARCHAR(3), STAGE1 VARCHAR(3), STAGE2 VARCHAR(3), STAGE3 VARCHAR(3));");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}

public void insert(String level, String stage1, String stage2, String stage3) {
    ContentValues carry = new ContentValues();

    carry.put("ID", 1);
    carry.put("LEVEL", level);
    carry.put("STAGE1", stage1);
    carry.put("STAGE2", stage2);
    carry.put("STAGE3", stage3);

    getWritableDatabase().insert("save_progress", null, carry);
}

public void update(int id, String level, String stage1, String stage2,
        String stage3) {
    getWritableDatabase().execSQL(
            "UPDATE save_progress SET LEVEL = '" + level + "', STAGE1 = '"
                    + stage1 + "', STAGE2 = '" + stage2 + "', STAGE3 = '"
                    + stage3 + "'  WHERE ID = " + id + ";");
}

public Cursor getAll() {
    return (getReadableDatabase().rawQuery("SELECT * FROM save_progress",
            null));
}

public String getId(Cursor c) {
    return (c.getString(0));
}

public String getLevel(Cursor c) {
    return (c.getString(1));
}

public String getStage(Cursor c, int level) {
    return (c.getString(level + 1));
}
}
主类。访问
Integer.parseInt(db.getLevel(select))
时出错:


感谢您的帮助。

您必须先设置
光标的位置,然后再使用它,使用
moveToFirsrt()、moveToLast()

这个问题有点不清楚,但我想您的意思是
SELECT*
不会返回
onCreate()中的所有列

您已更新了
SCHEMA\u版本
,但您的
onUpgrade()
为空。因此,数据库实际上没有被更新,尽管框架认为是这样的,因为
onUpgrade()
成功返回

清理应用程序数据或卸载它以删除旧的数据库文件。然后,当应用程序再次运行时,您的数据库助手
onCreate()
会正确地重新创建它

public class Level extends Activity {

DatabaseGame db = null;
Handler handlerTimer = new Handler();
ImageButton lv1, lv2, lv3;
Animation b1, b2, b3;
Cursor select = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.level);
    b1 = AnimationUtils.loadAnimation(this, R.anim.button);
    b2 = AnimationUtils.loadAnimation(this, R.anim.button);
    b3 = AnimationUtils.loadAnimation(this, R.anim.button);

    db = new DatabaseGame(this);
    select = db.getAll();
    if(select == null) {
        db.insert("1", "1", "1", "1");
    }
    initAnimation();
    super.onCreate(savedInstanceState);
}

@Override
protected void onPause() {
    super.onPause();
    db.close();
    finish();
}

public void initAnimation() {
    Thread animated = new Thread() {
        public void run() {
            try {
                lv1 = (ImageButton) findViewById(R.id.level1);
                lv1.setImageResource(R.drawable.level1_b);
                lv1.setAnimation(b1);
                lv1.startAnimation(b1);
                lv1.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        Bundle trans = new Bundle();
                        trans.putInt("level", 1);
                        Intent change = new Intent("com.idncd.indonesiaku.STAGE");
                        change.putExtras(trans);
                        startActivity(change);
                    }
                });

                handlerTimer.postDelayed(new Runnable() {
                    public void run() {
                        if (Integer.parseInt(db.getLevel(select)) > 1) {
                            lv2 = (ImageButton) findViewById(R.id.level2);
                            lv2.setImageResource(R.drawable.level2_b);
                            lv2.setAnimation(b2);
                            lv2.startAnimation(b2);
                            lv2.setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    Bundle trans = new Bundle();
                                    trans.putInt("level", 1);
                                    Intent change = new Intent("com.idncd.indonesiaku.STAGE");
                                    change.putExtras(trans);
                                    startActivity(change);
                                }
                            });
                        } else {
                            lv2 = (ImageButton) findViewById(R.id.level2);
                            lv2.setImageResource(R.drawable.level2_un_b);
                            lv2.setAnimation(b2);
                            lv2.startAnimation(b2);
                            lv2.setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {

                                }
                            });
                        }
                    }
                }, 300);

                handlerTimer.postDelayed(new Runnable() {
                    public void run() {
                        if (Integer.parseInt(db.getLevel(select)) > 2) {
                            lv3 = (ImageButton) findViewById(R.id.level3);
                            lv3.setImageResource(R.drawable.level3_b);
                            lv3.setAnimation(b3);
                            lv3.startAnimation(b3);
                            lv3.setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    Bundle trans = new Bundle();
                                    trans.putInt("level", 1);
                                    Intent change = new Intent("com.idncd.indonesiaku.STAGE");
                                    change.putExtras(trans);
                                    startActivity(change);
                                }
                            });
                        } else {
                            lv3 = (ImageButton) findViewById(R.id.level3);
                            lv3.setImageResource(R.drawable.level3_un_b);
                            lv3.setAnimation(b3);
                            lv3.startAnimation(b3);
                            lv3.setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {

                                }
                            });
                        }
                    }
                }, 600);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    animated.start();
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        Intent menu = new Intent("com.idncd.indonesiaku.MAINMENU");
        startActivity(menu);
        return true;
    } else {
        return super.onKeyUp(keyCode, event);
    }
}
}