我想将一些对象设置为hashmap的键。我需要将此hashmap保存到共享首选项。以下是我的代码。
public void saveDetailsMap(MyModel model, int type) {
HashMap<NVRModel, Integer> ipMap = getAddressMap();
ipMap.put(nvrModel, type);
JSONObject jsonObject = new JSONObject(ipMap);
String jsonString = jsonObject.toString();
settings.edit().putString(MAP, jsonString).commit();
}
public HashMap<MyModel, Integer> getAddressMap() {
HashMap<MyModel, Integer> ipMap = new HashMap<MyModel, Integer>();
try {
String jsonString = settings.getString(MAP,
(new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator keysItr = jsonObject.keys();
while (keysItr.hasNext()) {
MyModel key = (MyModel)keysItr.next();
Integer value = (Integer) jsonObject.get(key.toString());
ipMap.put(key, value);
}
} catch (Exception e) {
e.printStackTrace();
}
return ipMap;
}
但我得到了这个例外
java.lang.ClassCastException: com.model.MyModel cannot be cast to java.lang.String
在下面一行。
JSONObject jsonObject = new JSONObject(ipMap);
我该如何解决这个问题?
答案 0 :(得分:1)
hasmap必须是String类型才能是valide。其他你不能保存它,这是造成错误的原因。 你可以做的是使用一个文件来保存你的数据使用ObjectOutputStream。
File file = new File(getDir("data", MODE_PRIVATE), "map");
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(map);
outputStream.flush();
outputStream.close();
答案 1 :(得分:0)
javascript对象的键必须是String类型。因此,您不能使用HashMap<NVRModel, Integer> ipMap
作为JSONObject的构造函数参数。