首选项put
和get
方法需要并返回字符串值,但我需要处理对象(颜色),即
Preferences prefs = Preferences.userNodeForPackage(getClass());
prefs.put("savedColour", "red");
Color c = prefs.get("savedColour", "black");
显然最后一行有类型不匹配,但我无法在prefs中存储实际颜色,
prefs.put("savedColour", Color.RED)
因为你需要将它存储为字符串(或int,但不是颜色)。
对此有何解决方案?只有想到的东西才会非常混乱。
答案 0 :(得分:1)
也许你可以为你的Color
类添加一个构造函数,它接受一个String并构建Color
实例。
public Color(String nameOfColor) {
// do stuff
}
此外,您应该为toString()
类实现Color
方法。
答案 1 :(得分:1)
如果基本上“序列化”对象本身是一项要求,可能使用像Xstream或Google Gson这样的首选项API的备用系统可能是将对象“保存”到磁盘的选项。 / p>
这比仅使用Preferences API更复杂,请注意,如果Tichodroma描述的可能存储对象信息是可能的,我可能会这样做,但是你是否能够获得更高的灵活性代表您感兴趣的对象不仅仅是字符串。
您甚至可以将它与Preferences API互补使用,以便只序列化更复杂的对象,并且基本保存在Preferences格式中。
答案 2 :(得分:0)
将颜色值转换为十六进制值,然后将其存储为字符串。检索时将十六进制值解码为字符串。
public static String getColorString(Color c) {
int i = c.getRGB() & 0xFFFFFF;
String s = Integer.toHexString(i).toUpperCase();
while (s.length() < 6) {
s = "0" + s;
}
return s;
}
public static void putColor(Preferences node, String key, Color c) {
node.put(key, "0x" + getColorString(c));
}
public static Color getColor(Preferences node, String key, Color default_color) {
Color result = default_color;
String value = node.get(key, "unknown");
if (!value.equals("unknown")) {
try {
result = Color.decode(value);
} catch (Exception e) {
System.out.println("Couldn't decode color preference for '" + key + "' from '" + value + "'");
}
}
return result;
}
答案 3 :(得分:0)
有一种方法可以在首选项中存储对象,但需要几个步骤。您可以将对象转换为字节数组,将其分解为2D字节数组中的片段,然后将字节数组存储到单个节点的插槽中。以下是如何执行此操作的分步示例: