0

ゲーム構成をデータベースに保存しようとしています。このページのチュートリアルを使用しました: 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");

なぜ問題なのかわかりません... :(

4

0 に答える 0