我正在开发一款游戏,在玩的时候会有一些效果
public enum Effect {
DoublePoints(),
IncreaseSwitch(),
ShowOne(),
ShowSame();
@SerializedName("stored")
int stored;
@SerializedName("leftTime")
int leftTime;
Effect() {
}
public int getStored() {
return stored;
}
public void setStored(int stored) {
this.stored = stored;
}
public int getLeftTime() {
return leftTime;
}
public void setLeftTime(int leftTime) {
this.leftTime = leftTime;
}
}
用stored
i检查我具有的效果的计数,并且leftTime
是直到效果结束的时间。
为了有效地读取和写入,我使用HashMap
在运行时处理效果
private Map<String, EnumCollection.Effect> gameEffects = new HashMap<>();
并将其存储为数据库中的String
。
现在我用Gson来解析效果 * 从字符串 * 通过游戏的初始化和 * 到字符串 * 通过保存。
// read
public void setEffects() {
if (game.getEffects() == null) {
gameEffects.put(EnumCollection.Effect.DoublePoints.toString(), EnumCollection.Effect.DoublePoints);
EnumCollection.Effect switchEffect = EnumCollection.Effect.IncreaseSwitch;
switchEffect.setLeftTime(3);
gameEffects.put(EnumCollection.Effect.IncreaseSwitch.toString(), switchEffect);
gameEffects.put(EnumCollection.Effect.ShowOne.toString(), EnumCollection.Effect.ShowOne);
gameEffects.put(EnumCollection.Effect.ShowSame.toString(), EnumCollection.Effect.ShowSame);
} else {
Type collectionType = new TypeToken<HashMap<String, EnumCollection.Effect>>() {
}.getType();
gameEffects = new Gson().fromJson(game.getEffects(), collectionType);
}
}
// write
private void saveGameValues() {
String effectsString = new Gson().toJson(gameEffects);
...
}
现在就去
我可以成功地关闭和打开应用程序。数据写入和读取成功的数据库。
通过重新打开应用程序,我得到了我所期望的 stored 和 leftTime 值。
"但是...“
一旦我使用Android Studio
重新运行按钮 * 重新启动 * 应用程序,stored 和 leftTime 为0。
当记录字符串接收到的影响时:
effects: {"ShowSame":"ShowSame","DoublePoints":"DoublePoints","ShowOne":"ShowOne","IncreaseSwitch":"IncreaseSwitch"}
对于@SerializedName
,是否应存储值?
我错过了什么?
难道是TypeToken
有什么问题?
1条答案
按热度按时间kxe2p93d1#
通过从
enum
到Object
求解从那
工作正常。
HashMap
仍然可以用来更好地获得效果