阅读java.util.Map<;字符串,?gt;从文件中

阅读java.util.Map<;字符串,?gt;从文件中,java,android,dictionary,libgdx,Java,Android,Dictionary,Libgdx,我在从保存到首选项文件的映射中获取值时遇到问题。我可以从地图上打印出关键点,但不能打印任何值。我想这和我正在做的打字工作有关,但我已经尝试了我所知道的一切,但还是弄不明白 我测试了保存到preferences文件的映射中的值,它们输出得很好 我尝试了下面的建议,但没有帮助 这是我的密码 public class SetSettings { private Actor actor; private Actor hit; private Sprite sprite; private Sprite s

我在从保存到首选项文件的映射中获取值时遇到问题。我可以从地图上打印出关键点,但不能打印任何值。我想这和我正在做的打字工作有关,但我已经尝试了我所知道的一切,但还是弄不明白

我测试了保存到preferences文件的映射中的值,它们输出得很好

我尝试了下面的建议,但没有帮助

这是我的密码

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;
    }
}
公共类设置{
私人演员;
私人演员热播;
私人雪碧;
私人精灵精灵2;
私有矩形矩形;
私有布尔值customHit=false;
私有ShaperEnder render=新ShaperEnder();
公众浮躁;
公共浮动x;
Array actors=GameScreen.buttons.stage.getActors();
公共设置设置(){
setOriginal();
setCustom();
rect=新矩形();
}
公共文件原件(){
learnGame.ass.settings.get().clear();
float height=Gdx.graphics.getHeight();
float width=Gdx.graphics.getWidth();
//用户界面设置
java.util.Map Map=new HashMap();
map.put(“hpBar”,新坐标(宽度-(learnGame.ass.hpBar.getWidth()*1.02f),高度-(height*.076f));
map.put(“hpBase”,新坐标(learnGame.ass.hpBar.getX(),learnGame.ass.hpBar.getY());
for(输入键:map.entrySet())
System.out.println(key.getValue().x);//在这里工作正常
}
public void setCustom(){
java.util.Map amap=(java.util.HashMap)learnGame.ass.settings.get();
//Float[]nums=amap.get(“hpBar”);
for(输入键:amap.entrySet()){

///float t=key.getValue().x;//您需要做的是:

float t = Float.parseFloat(theString);
您还应该在这里发现一个“NumberFormatException”

您的问题:

java.util.Map<String, Coords> amap = (java.util.HashMap<String, Coords>) learnGame.ass.settings.get();
java.util.Map amap=(java.util.HashMap)learnGame.ass.settings.get();
您不能将
Map
强制转换为
HashMap
!这不是类型安全的

试试这样的方法:

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
    }
}
Map settings=learnGame.ass.settings.get();
for(条目:settings.entrySet()){
if(entry.getValue()instanceof Coords){
Coords Coords=(Coords)entry.getValue();
//用coords做一些
}
}

您应该像下面给出的示例一样从共享首选项中保存/加载


learnGame
在哪里声明?learnGame.ass.settings的类型是什么?其类型首选项当我尝试此操作时,我的所有值仍被视为字符串。-->entry.getValue()是字符串的实例这对我不起作用,因为我需要从“字符串”中获取两个浮点值你能解释一下Coords.x的类型吗?它是一个浮点数,但“字符串”应该是Coords类型,它包含x和y。无论如何,我问了另一个问题,发现Libgdx首选项不接受objectslearnGame.ass.settings.get()的数组或集合;实际上是一个映射,因为这是属于类型首选项的设置将返回的唯一内容。我的值仍然作为java.lang.String的SEE更新答案返回,希望示例+链接将帮助您更好地理解保存/加载,我知道有一个帮助了我一段时间是的,这是有意义的,遗憾的是我使用libgdx
//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
}
 for (Entry<String, Coords> key : amap.entrySet()) {
       float x_value = key.getValue().getX(); 
       float y_value = key.getValue().getY(); 
    }
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;
      }
}