【发布时间】:2011-09-27 22:17:37
【问题描述】:
所以我仍在构建数据库来支持我的项目。有两种不同的东西需要保存:第一,一些播放器对象的属性值,第二,存储在 java 类中的简单值。
ATM 我的问题在于加载播放器对象的值并将其写入相应类的过程。
现在让我们看一些代码:
接下来你会看到我想用来将值保存在数据库中的方法。 这很好用,但我刚刚意识到我仍在向 contentValues 对象传递一个额外的 'ID' 值,我确实设置了 - 并计划保持这种方式 - 作为自动增量。 任何想法如何相应地工作?
public void savePlayer(Player player[]) {
for (int i = 0; i <= 3; i++) {
playerValues.put("ID", i);
playerValues.put("Name", player[i].getName());
playerValues.put("HP", player[i].getHp());
playerValues.put("Satisfaction", player[i].getsatisfaction());
playerValues.put("Hygiene", player[i].isHygieneInt());
playerValues.put("IsAlive", player[i].isAliveInt());
}
db.insert("playertable", null, playerValues);
}
好的,请坚持住,因为这可能看起来有点像意大利面 - 加载方法:
public void loadPlayer() {
String[] namecolumn = { "Name" };
String[] intcolumn = { "ID, HP, Satisfaction, Hygiene, IsAlive" };
String[] namesToString = new String[4];
for (int j = 0; j <= 3; j++) {
Cursor playerCursorName = db.query("playertable", namecolumn, "ID="
+ j, null, null, null, null);
namesToString = cursorToString(playerCursorName);
Resource.playerArray[j].setName(namesToString[j]);
}
for (int i = 0; i < 3; i++) {
int[] restToInt;
Cursor playerCursorInt = db.query("playertable", intcolumn, "ID="
+ i, null, null, null, null);
restToInt = cursorToInt(playerCursorInt, 4);
Resource.playerArray[i].setHp(restToInt[i]);
Resource.playerArray[i].setsatisfaction(restToInt[i]);
Resource.playerArray[i].setHygieneInt(restToInt[i]);
Resource.playerArray[i].setAliveInt(restToInt[i]);
}
}
是的,我知道这看起来很丑,但让我解释一下:
因为有 4 个播放器对象,我计划通过使用 ID 作为标识符来遍历数据库条目,以一次准确地获取一行,并在我想要的 java 类中写入该对象的名称和其他值在我的项目中管理它们。
注意:这里的自动增量问题与保存方法相同
另外,我在调用 loadPlayer 时得到了 CursorIndexOutOfBoundsException,因为 正在请求索引 -1 - 这不是对数据库的操作导致错误的结果吗?
是的,差不多就是这样,如果需要,我会为您提供额外的代码,希望有人可以帮助我
【问题讨论】:
-
您可能还想发布创建数据库表的代码,以及 cursorToString 和 cursorToInt 代码。
标签: android sqlite loading save