简体   繁体   中英

read java.util.Map<String,?> from a file

I'm having a problem with getting values from a map that I save into a Preferences file. I can print out the keys from the map, but not any values. I think it has something to do with the typecasting that I'm doing, but I've tried everything I know of and can't figure it out.

I tested the values from the map that I saved to the preferences file, and they output just fine.

I tried the suggestions below but they did not help

Heres my code

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;
    }
}

}

You should be saving/loading from shared preferences like the example given 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
}

You need to look at the return value of the methods you're using in Coords, and use variables typed appropriately to store those return values.

Something like this should work no problem:

 for (Entry<String, Coords> key : amap.entrySet()) {
       float x_value = key.getValue().getX(); 
       float y_value = key.getValue().getY(); 
    }

Should work fine with a 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;
      }
}

What you have to do is:

float t = Float.parseFloat(theString);

You should also catch a "NumberFormatException"

Your problem at here:

java.util.Map<String, Coords> amap = (java.util.HashMap<String, Coords>) learnGame.ass.settings.get();

You can't just cast Map<String, ?> to HashMap<String, Coords> ! It's not TypeSafe!

Try some like this:

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
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM