我在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]);
每当我尝试从该类登录时(在&#39;数据打印&#39;日志中)它总是说null 但是如果我直接从ArrayList(在&#39;阵列列表&#39;日志中)记录它,则值会出现..
让我更奇怪的是,如果我在将地图值添加到首选项之前更改地图值,请执行以下操作:
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"));
显示的数据...... 所以我现在感到困惑,并且无法弄清楚(还)我的问题在哪里..
任何帮助将不胜感激:)
答案 0 :(得分:2)
由于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] );