私は、Android上のSQLiteデータベースに保存したい複数の世界とレベル(それぞれがそれぞれのデータを持つ)を持つゲームを開発中です。私はいくつかの非常に基本的なアプリケーションでSQLiteを実装していますが、これまでのところ、libgdxフレームワークと連携して動作させることはできません。libgdxでSQLiteを使って作業する
私が実際に行ったことは、他のクラスのクラスで使用する静的メンバーがあるAssetsクラスを維持していることです。私は、アプリケーションがAndroidの電話機/エミュレータで実行されているときにSQLiteデータベースを処理するためのクエリ文字列といくつかのプライベートメソッドを維持するSQLHelperの名前で、プライベート静的ネストされたクラスを持っています。ここで
は、コードを垣間見るです:
public class Assets {
//A lot of code (unrelated to SQLHelper class) and to be used in classes elsewhere
SQLiteDatabase database;
//SQLHelper class
private static class SQLHelper {
private static String createTableSettings = "CREATE TABLE IF NOT EXISTS settings(settingID INTEGER PRIMARY KEY, settingName VARCHAR(15) NOT NULL, settingParamOne INTEGER NULL, settingParamTwo INTEGER NULL, settingParamThree INTEGER NULL);";
private static String createTableWorldData = "CREATE TABLE IF NOT EXISTS worldData(worldID INTEGER PRIMARY KEY, worldScore INTEGER DEFAULT 0, worldStars INTEGER DEFAULT 0);";
private static String createTableLevelData = "CREATE TABLE IF NOT EXISTS levelData(levelID INTEGER PRIMARY KEY, levelStars INTEGER DEFAULT 0, worldID INTEGER NOT NULL, FOREIGN KEY(worldID) REFERENCES worldData(worldID));";
@SuppressWarnings("static-access")
private static void openDatabase() {
try {
database.openDatabase("gameName", null, database.CREATE_IF_NECESSARY);
} catch (Exception e) {
Gdx.app.log("Exception in opening databases", "This should not happen on an Android Device (This is fine on java.)");
e.printStackTrace();
}
}
private static void createTables() {
try {
database.execSQL("PRAGMA foreign_keys=ON;");
database.execSQL(createTableSettings, null);
database.execSQL(createTableWorldData, null);
database.execSQL(createTableLevelData, null);
} catch (SQLException e) {
Gdx.app.log("Exception in createTables", "This should not happen on an Android Device (This is fine on java.)");
e.printStackTrace();
}
}
}
}
public static void load() {
myManager = new AssetManager();
SQLHelper.openDatabase();
SQLHelper.createTables();
loadTextures();
}
そして私はlogcatによって登録された例外のこれらのタイプを取得しています:
02-14 22:45:53.261: E/SqliteDatabaseCpp(578): sqlite3_open_v2("gameName", &handle, 6, NULL) failed
Failed to open the database. Closing it.
02-14 22:45:53.291: E/SQLiteDatabase(578):
android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file
私はに新しいですと、この点で私を助けてくださいlibgdx/SQLite。
私はこれらすべての実装の詳細を抽象化し、AndroidとDesktopのデータベースを同時に処理するための簡単な方法を提供する拡張機能を書いています。 https://github.com/mrafayaleem/gdx-sqliteにあります。 – Rafay