我正在使用此方法将String数组转换为Item数组(用于将其保存在sharedprefrences中)。
strings = new ArrayList<String>();
for (Object object : itemArrey) {
strings.add(object != null ? object.toString() : null);
}
b1s.edit().putString("array", ObjectSerializer.serialize(strings)).commit();
但是要将其加载到 listview 中,我需要将其再次转换为项目数组(由于某些原因,我无法使用String数组作为 listview )。 我怎样才能实现它?
答案 0 :(得分:1)
据我所知,你需要保持&#34;可读字符串&#34;对象并将其转换回对象。在这种情况下,我建议将Object ArrayList直接序列化为JSON,因为它具有可读性(如果需要)并且易于操作(编码和解码)。您可以使用Json-Simple或Gson进行序列化,但如果对象很复杂,最好使用Gson。
答案 1 :(得分:0)
对此没有一般解决方案。
基本上,您希望对每个对象执行与Object.toString()
相反的操作。没有通用的方法可以做到这一点。
如果您知道项目的toString()
方法生成的内容,以及它们生成的字符串包含原始项目对象的信息内容的所有,则可能(理论上)编写一个自定义方法来解析字符串。但是你需要自己编写解析方法。
真正的解决方案可能是直接序列化ArrayList<Item>
。如有必要,请解决阻止 工作的问题。
你问:
我可以将序列化项目数组保存到sharedprefrences
由于您使用ObjectSerializer
中的org.apache.pig
类,因此您将使用常规Java对象序列化。
这意味着只有ArrayList<Item>
类可以序列化时才能序列化Item
。
反过来,这需要以下内容:
Item
必须(直接或间接)实施Serializable
AND:
Item
的所有非易失性实例字段必须是可序列化的,或者Item
必须覆盖writeObject
和readObject
,或Item
还必须实施Externalizable
。对于可序列化的字段,它必须是基本类型,可序列化对象类型或可序列化类型的数组。许多Java库类型实现Serializable
;例如原始包装器String
,Collection
类型等等。