从文件中读取 java.util.Map<String,?>
read java.util.Map<String,?> from a file
我在从保存到首选项文件中的地图中获取值时遇到问题。我可以打印出地图上的键,但不能打印出任何值。我认为这与我正在做的类型转换有关,但我已经尝试了我所知道的一切,但无法弄清楚。
我测试了保存到首选项文件的地图中的值,它们输出得很好。
我尝试了以下建议,但它们没有帮助
这是我的代码
public class SetSettings {
private Actor actor;
private Actor hit;
private Sprite sprite;
private Sprite sprite2;
private Rectangle rect;
private boolean customHit = false;
private ShapeRenderer render = new ShapeRenderer();
public float y;
public float x;
Array<Actor> actors = GameScreen.buttons.stage.getActors();
public SetSettings() {
setOriginal();
setCustom();
rect = new Rectangle();
}
public void setOriginal() {
learnGame.ass.settings.get().clear();
float height = Gdx.graphics.getHeight();
float width = Gdx.graphics.getWidth();
// ui settings
java.util.Map<String, Coords> map = new HashMap<String, Coords>();
map.put("hpBar", new Coords(width - (learnGame.ass.hpBar.getWidth() * 1.02f), height - (height * .076f)));
map.put("hpBase", new Coords(learnGame.ass.hpBar.getX(), learnGame.ass.hpBar.getY()));
for (Entry<String, Coords> key : map.entrySet())
System.out.println(key.getValue().x); // works fine here
}
public void setCustom() {
java.util.Map<String, Coords> amap = (java.util.HashMap<String, Coords>) learnGame.ass.settings.get();
// Float[] nums = amap.get("hpBar");
for (Entry<String, Coords> key : amap.entrySet()) {
// /float t = key.getValue().x; // <-----------error here -- java.lang.String cannot be cast
System.out.println("6" + key.getKey());
// String xz = key.getValue();
}
}
public class Coords {
float x;
float y;
public Coords(float x, float y) {
this.x = x;
this.y = y;
}
}
}
您需要做的是:
float t = Float.parseFloat(theString);
你还应该赶上一个"NumberFormatException"
你的问题在这里:
java.util.Map<String, Coords> amap = (java.util.HashMap<String, Coords>) learnGame.ass.settings.get();
您不能只将 Map<String, ?>
转换为 HashMap<String, Coords>
!这不是 TypeSafe!
试试这样的:
Map<String, ?> settings = learnGame.ass.settings.get();
for (Entry<String, ?> entry : settings.entrySet()) {
if (entry.getValue() instanceof Coords) {
Coords coords = (Coords) entry.getValue();
// do some with coords
}
}
您应该 saving/loading 来自共享偏好,例如给出的示例 here
//persist
HashMap<String, Integer> counters; //the hashmap you want to save
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
for (String s : counters.keySet()) {
editor.putInteger(s, counters.get(s));
}
editor.commit();
//load
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
HashMap<String, Integer> map= (HashMap<String, Integer>) pref.getAll();
for (String s : map.keySet()) {
Integer value=map.get(s);
//Use Value
}
您需要查看您在 Coords 中使用的方法的 return 值,并使用正确键入的变量来存储这些 return 值。
像这样应该没问题:
for (Entry<String, Coords> key : amap.entrySet()) {
float x_value = key.getValue().getX();
float y_value = key.getValue().getY();
}
应该可以与 getter:
一起正常工作
public class Coords {
float x;
float y;
public Coords(float x, float y) {
this.x = x;
this.y = y;
}
public float getX(){
return this.x;
}
public float getY(){
return this.y;
}
}
我在从保存到首选项文件中的地图中获取值时遇到问题。我可以打印出地图上的键,但不能打印出任何值。我认为这与我正在做的类型转换有关,但我已经尝试了我所知道的一切,但无法弄清楚。
我测试了保存到首选项文件的地图中的值,它们输出得很好。
我尝试了以下建议,但它们没有帮助
这是我的代码
public class SetSettings {
private Actor actor;
private Actor hit;
private Sprite sprite;
private Sprite sprite2;
private Rectangle rect;
private boolean customHit = false;
private ShapeRenderer render = new ShapeRenderer();
public float y;
public float x;
Array<Actor> actors = GameScreen.buttons.stage.getActors();
public SetSettings() {
setOriginal();
setCustom();
rect = new Rectangle();
}
public void setOriginal() {
learnGame.ass.settings.get().clear();
float height = Gdx.graphics.getHeight();
float width = Gdx.graphics.getWidth();
// ui settings
java.util.Map<String, Coords> map = new HashMap<String, Coords>();
map.put("hpBar", new Coords(width - (learnGame.ass.hpBar.getWidth() * 1.02f), height - (height * .076f)));
map.put("hpBase", new Coords(learnGame.ass.hpBar.getX(), learnGame.ass.hpBar.getY()));
for (Entry<String, Coords> key : map.entrySet())
System.out.println(key.getValue().x); // works fine here
}
public void setCustom() {
java.util.Map<String, Coords> amap = (java.util.HashMap<String, Coords>) learnGame.ass.settings.get();
// Float[] nums = amap.get("hpBar");
for (Entry<String, Coords> key : amap.entrySet()) {
// /float t = key.getValue().x; // <-----------error here -- java.lang.String cannot be cast
System.out.println("6" + key.getKey());
// String xz = key.getValue();
}
}
public class Coords {
float x;
float y;
public Coords(float x, float y) {
this.x = x;
this.y = y;
}
}
}
您需要做的是:
float t = Float.parseFloat(theString);
你还应该赶上一个"NumberFormatException"
你的问题在这里:
java.util.Map<String, Coords> amap = (java.util.HashMap<String, Coords>) learnGame.ass.settings.get();
您不能只将 Map<String, ?>
转换为 HashMap<String, Coords>
!这不是 TypeSafe!
试试这样的:
Map<String, ?> settings = learnGame.ass.settings.get();
for (Entry<String, ?> entry : settings.entrySet()) {
if (entry.getValue() instanceof Coords) {
Coords coords = (Coords) entry.getValue();
// do some with coords
}
}
您应该 saving/loading 来自共享偏好,例如给出的示例 here
//persist
HashMap<String, Integer> counters; //the hashmap you want to save
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
for (String s : counters.keySet()) {
editor.putInteger(s, counters.get(s));
}
editor.commit();
//load
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
HashMap<String, Integer> map= (HashMap<String, Integer>) pref.getAll();
for (String s : map.keySet()) {
Integer value=map.get(s);
//Use Value
}
您需要查看您在 Coords 中使用的方法的 return 值,并使用正确键入的变量来存储这些 return 值。
像这样应该没问题:
for (Entry<String, Coords> key : amap.entrySet()) {
float x_value = key.getValue().getX();
float y_value = key.getValue().getY();
}
应该可以与 getter:
一起正常工作public class Coords {
float x;
float y;
public Coords(float x, float y) {
this.x = x;
this.y = y;
}
public float getX(){
return this.x;
}
public float getY(){
return this.y;
}
}