如何从String Array中获取ItemArray?

时间:2014-08-25 07:47:43

标签: java android

我正在使用此方法将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 )。 我怎样才能实现它?

2 个答案:

答案 0 :(得分:1)

据我所知,你需要保持&#34;可读字符串&#34;对象并将其转换回对象。在这种情况下,我建议将Object ArrayList直接序列化为JSON,因为它具有可读性(如果需要)并且易于操作(编码和解码)。您可以使用Json-SimpleGson进行序列化,但如果对象很复杂,最好使用Gson

答案 1 :(得分:0)

对此没有一般解决方案。

基本上,您希望对每个对象执行与Object.toString()相反的操作。没有通用的方法可以做到这一点。

如果您知道项目的toString()方法生成的内容,以及它们生成的字符串包含原始项目对象的信息内容的所有,则可能(理论上)编写一个自定义方法来解析字符串。但是你需要自己编写解析方法。

真正的解决方案可能是直接序列化ArrayList<Item>。如有必要,请解决阻止 工作的问题。


你问:

  

我可以将序列化项目数组保存到sharedprefrences

由于您使用ObjectSerializer中的org.apache.pig类,因此您将使用常规Java对象序列化。

这意味着只有ArrayList<Item>类可以序列化时才能序列化Item

反过来,这需要以下内容:

  • Item必须(直接或间接)实施Serializable AND:
    • Item的所有非易失性实例字段必须是可序列化的,或者
    • Item必须覆盖writeObjectreadObject,或
    • Item还必须实施Externalizable

对于可序列化的字段,它必须是基本类型,可序列化对象类型或可序列化类型的数组。许多Java库类型实现Serializable;例如原始包装器StringCollection类型等等。