我对 LibGdx 和 Android 编程还是新手..
我正在尝试创建一个类,用于在我的应用程序中存储数据 类看起来像这样
package com.mygdx.hanoi.util;
import java.util.Map;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Preferences;
public class DataPersister2 {
public Preferences getOrCreatePreferences(String prefName){
return Gdx.app.getPreferences(prefName + ".prefs");
}
public Map getPreferencesData(Preferences prefName){
return (Map) prefName.get(); //.get(key);
}
public void clearPreferences(Preferences prefName){
prefName.clear();
}
public void insertPreferences(Preferences prefName, Map data){
prefName.put(data);
prefName.flush();
}
}
问题是,当我尝试使用该类创建首选项并向其中添加 ArrayList 时,它总是说首选项为 null
DataPersister2 hs = new DataPersister2();
Preferences hScore = hs.getOrCreatePreferences("highScores");
hs.clearPreferences(hScore);
// dummy test score data
ArrayList<String[]> hsFreeMode = new ArrayList<String[]>(); // declare apa yang mau ditaruh sini, biar ga error di kemudian method
hsFreeMode.add(new String[] {"luki", "5000"});
hsFreeMode.add(new String[] {"laras", "3900"});
ArrayList hsMoveMode = new ArrayList();
hsMoveMode.add(new String[] {"cika", "6000"});
hsMoveMode.add(new String[] {"cikoo", "1000"});
Map hsMap = new HashMap();
hsMap.put("freeMode", hsFreeMode);
hsMap.put("moveMode", hsMoveMode);
//hs.insertPreferences("highScores", hsMap);
hs.insertPreferences(hScore, hsMap);
// print out the data
Map data = hs.getPreferencesData(hScore);
Gdx.app.log("data print", "the free mode value is " + (String[]) data.get("freeMode"));
Gdx.app.log("Array List", "the arraylist contains" + hsFreeMode.get(0)[0]);
每当我尝试从该类记录(在“数据打印”日志中)时,它总是显示 null 但是如果我直接从 ArrayList(在“Array List”日志中)记录它,该值就会出现..
对我来说更奇怪的是,如果我在将 map 值添加到首选项之前更改 map 值,如下所示:
Map hsMap = new HashMap();
hsMap.put("freeMode", "luki");
hsMap.put("moveMode", "laras");
//hs.insertPreferences("highScores", hsMap);
hs.insertPreferences(hScore, hsMap);
并像这样记录数据:
Gdx.app.log("data print", "the free mode value is " + data.get("freeMode"));
显示的数据... 所以我现在很困惑,还无法弄清楚我的问题出在哪里..
任何帮助将不胜感激:)
最佳答案
由于 libgdx 文档 Preferences仅支持字符串和基本类型,因此您不能仅将数组放入首选项中。您需要在放置之前对其进行序列化,并在获取数据后对其进行反序列化,例如 JSON
//adding to the preferences:
hsMap.put("freeMode", json.toJson( hsFreeMode ) );
//and then:
Gdx.app.log("data print", "the free mode value is " + ( (String[])json.fromJson(ArrayList.class, String[].class, (String)data.get("freeMode") ).get(0) )[0] );
关于java - LibGdx 使用 ArrayList 进行数据持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32937019/