Я работал с таблицей базы данных, содержащей имя игрока, количество побед и количество потерь.
Тогда я бы назвал базу данных из основного вида деятельности, откройте, обновил или что-то еще, и, наконец, закройте.Невозможно запустить/создать базу данных SQLite в android
И это работало отлично.
Затем я добавил другие столбцы и продолжал работать.
Однако я установил игру на реальное устройство, и это не сработало.
Проблема не была в моем эмуляторе, так как она снова и снова перезаписывала существующую базу данных.
Я решил unistall приложение из эмулятора, а затем перестал работать. Кажется, что моя игра обнаружила некоторые проблемы при создании новой базы данных при первом запуске.
После выполнения некоторых тестов у меня были разные ошибки, такие как «не null constrain» или «CursorIndexOutOfBounds».
Поэтому я могу сказать, что проблема заключается в создании базы данных, но я не знаю, что случилось.
Я не думаю, что ошибка находится в основном Управлении, так как я всегда делал то же самое и раньше работал, но я изменил базу данных.
Возможно, проблема в том, где я инициализирую значения в функции onCreate()
, например, это не дает значения для базы данных?
В любом случае, возможно, я сосредоточен на неправильной точке, поэтому я подумал, что новые перспективы могут помочь.
Здесь у вас есть класс базы данных:
public class DatabaseAdapter {
private final Context context;
public static final String C_COLUMNA_ID = "_id";
public static final String C_COLUMNA_NAME = "menu_player";
public static final String C_COLUMNA_VICTORY = "menu_victory";
public static final String C_COLUMNA_LOSS = "menu_loss";
public static final String C_COLUMNA_POINTS = "menu_points";
public static final String C_COLUMNA_UNLOCKED = "menu_unlocked";
public static final String C_COLUMNA_LEVEL = "menu_level";
private static final String NAME_TABLE = "menu";
private static final String DATABASE_NAME = "data";
private static final String TAG = "DBAdapter";
private String INSERT_OR_UPDATE_RECORD;
private DatabaseHelper DatabaseHelper;
private SQLiteDatabase db;
public DatabaseAdapter(Context context){
this.context = context;
DatabaseHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper{
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database){
database.execSQL("CREATE TABLE MENU(" +
" _id INTEGER PRIMARY KEY," +
" menu_player TEXT NOT NULL, " +
" menu_victory INTEGER, " +
" menu_loss INTEGER," +
" menu_points INTEGER," +
" menu_unlocked INTEGER," +
" menu_level INTEGER)");
//initialize
database.execSQL("INSERT INTO MENU(_id, menu_player) VALUES(1,'Pla Yer Uan')");
database.execSQL("INSERT INTO MENU(_id, menu_victory) VALUES(1,0)");
database.execSQL("INSERT INTO MENU(_id, menu_loss) VALUES(1,0)");
database.execSQL("INSERT INTO MENU(_id, menu_points) VALUES(1,0)");
database.execSQL("INSERT INTO MENU(_id, menu_unlocked) VALUES(1,0)");
database.execSQL("INSERT INTO MENU(_id, menu_level) VALUES(1,1)");
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion){
database.execSQL("DROP TABLE IF EXISTS todo");
onCreate(database);
}
}
public DatabaseAdapter open() throws SQLException{
db = DatabaseHelper.getWritableDatabase();
return this;
}
public void close(){
DatabaseHelper.close();
}
public boolean updateRecord(long rowId, String columna, String newPlayerName, int value){
ContentValues args = new ContentValues();
switch (columna){
case "nombre":
args.put(C_COLUMNA_NOMBRE, newPlayerName);
break;
case "victory":
args.put(C_COLUMNA_VICTORY,value);
break;
case "loss":
args.put(C_COLUMNA_LOSS,value);
break;
case "royals":
args.put(C_COLUMNA_POINTS,value);
break;
case "unlocked":
args.put(C_COLUMNA_UNLOCKED,value);
break;
case "level":
args.put(C_COLUMNA_LEVEL,value);
break;
}
return db.update(NAME_TABLE,args,C_COLUMNA_ID + "=" + rowId,null)>0;
}
public void backToDefault(){
ContentValues args = new ContentValues();
args.put(C_COLUMNA_NAME, "Pla Yer Uan");
args.put(C_COLUMNA_VICTORIAS,0);
args.put(C_COLUMNA_DERROTAS,0);
args.put(C_COLUMNA_ROYALS,0);
args.put(C_COLUMNA_UNLOCKED,0);
args.put(C_COLUMNA_LEVEL,1);
db.update(NAME_TABLE,args,C_COLUMNA_ID + "=" + 1,null);
}
public Cursor getRecord(long rowId, String columna) throws SQLException{
Cursor cursor = db.query(true, NAME_TABLE, new String[]{
C_COLUMNA_ID,
columna
},
C_COLUMNA_ID + "=" + rowId,
null,
null,
null,
null,
null);
if (cursor != null){
cursor.moveToFirst();
}
return cursor;
}
}
Получение этой ошибки:
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
Вы вводите один и тот же первичный ключ несколько раз в onCreate Method. –