ゲーム構成をデータベースに保存しようとしています。このページのチュートリアルを使用しました: page . configuracion と呼ばれるこのクラスを作成します。
public class Configuraciones extends SQLiteOpenHelper {
static final String table_name = "configuraciones";
static final String cod_config = "id";
static final String nom_config = "nombre";
static final String val_config = "valor";
public Configuraciones(Context context) {
super(context, "bdd_cuarenta", null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE " + table_name + "("
+ cod_config + " INTEGER PRIMARY KEY," + nom_config + " TEXT,"
+ val_config + " TEXT" + ");";
// ESTABLISH NEW DATABASE TABLES IF THEY DON'T ALREADY EXIST IN THE DATABASE
db.execSQL(CREATE_TABLE);
//Ingresa las configuraciones por primera vez
ingresaTablas(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int vieja, int nueva) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + table_name);
onCreate(db);
}
public String consultaConfiguracion(String nombre){
SQLiteDatabase myDB = getReadableDatabase();
String[] mySearch = new String[]{nombre};
Cursor myCursor = myDB.rawQuery("SELECT "+ val_config +" FROM "+ table_name +" WHERE "+ nom_config +"='?'",mySearch);
myCursor.moveToFirst();
int index = myCursor.getColumnIndex(val_config);
String myAnswer = myCursor.getString(index);
myCursor.close();
return myAnswer;
}
public int actualizaConfig(String nombre, String nuevaConfig)
{
SQLiteDatabase myDB = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(val_config, nuevaConfig);
int numRowsAffected = myDB.update(table_name, cv, nom_config+"='?'", new String []{String.valueOf(nombre)});
return numRowsAffected;
}
しかし、actualizaConfig などのメソッドの 1 つを呼び出すと、エラーが発生しました。
java.lang.IllegalStateException: getDatabase が再帰的に呼び出されました
私のゲーム活動では、通常、次のようにオブジェクトを呼び出しました。
private BoundCamera camera;
private Configuraciones configs;
@Override
public Engine onCreateEngine(EngineOptions pEngineOptions)
{
return new LimitedFPSEngine(pEngineOptions, 60);
}
public EngineOptions onCreateEngineOptions()
{
camera = new BoundCamera(0, 0, 800, 480);
configs = new Configuraciones(this);
EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(), this.camera);
engineOptions.getAudioOptions().setNeedsMusic(true).setNeedsSound(true);
engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
return engineOptions;
}
GameScene では、次のようにメソッドを呼び出します。
resourcesManager.config.actualizaConfig("diseno_carta", "9");
なぜ問題なのかわかりません... :(