所以我还在构建一个数据库来支持我的项目。有两种不同的东西需要保存:第一,某些玩家对象的属性值,第二,存储在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 - 是不是数据库上的操作结果导致错误?
是的,非常重要,我会根据要求为您提供额外的代码,希望有人可以帮助我
答案 0 :(得分:0)
你在这里稍微使用游标。
Cursor的要点是要求SQLite为您提取数据的艰苦工作,您的工作就是使用游标迭代返回的值。
首先,我会在这里更改查询以询问表中的所有值(并且可能会设置一些条件来约束你得到的内容),以确保你的光标包含你所有的值。
然后,我将使用一个while循环(在循环之前使用cursor.moveToPosition(-1))通过使用cursor.moveToNext()沿光标移动来遍历游标的值。
有关详细信息,请参阅API:
http://developer.android.com/reference/android/database/Cursor.html
关于自动增量问题,据我所知,您可以省略ID并使用不带该字段的db.insert(),数据库将为您提供ID。
你的加载方法不应该有同样的问题,因为加载时自动增量是没有意义的,你只需要回到数据库中的内容。