I have a database that contains level and stage of the game and the problem is every time I call method getId()
, getLevel()
or getStage()
in my code, it's just throws CursorIndexOutOfBoundsException
. I have 5 indices of my database but it tells me that only 0 indices are available. This is the code:
Database helper class:
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));
}
}
Main class. The error occures when I access Integer.parseInt(db.getLevel(select))
:
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);
}
}
}
Thank you for your help.
You have to firstly set location of Cursor
refrence before use it , Use moveToFirsrt(), moveToLast()
etc..