0

我正在尝试在我的 Android 应用程序中使用 XStream(我之前也使用 XStream 创建过 XML 文件)从 XML 文件中读取 TreeMap。

我只是在一个类的静态方法中做到这一点

File f = new File(Environment.getExternalStorageDirectory(), "map.xml");

XStream xStream = new XStream(new DomDriver());

@SuppressWarnings("unchecked")      
TreeMap<String,Object> map = (TreeMap<String,Object>) xStream.fromXML(f);

然后我第一次毫无问题地使用 TreeMap 中的值。

问题是,如果我第二次调用该方法,无论我是在第一次执行之后还是在一段时间之后执行它都没有关系,我得到这个:

05-24 08:33:53.404: E/AndroidRuntime(15543): FATAL EXCEPTION: main
05-24 08:33:53.404: E/AndroidRuntime(15543): com.thoughtworks.xstream.converters.ConversionException: null : null
05-24 08:33:53.404: E/AndroidRuntime(15543): ---- Debugging information ----
05-24 08:33:53.404: E/AndroidRuntime(15543): cause-exception     : java.lang.NullPointerException
05-24 08:33:53.404: E/AndroidRuntime(15543): cause-message       : null
05-24 08:33:53.404: E/AndroidRuntime(15543): class               : java.util.TreeMap
05-24 08:33:53.404: E/AndroidRuntime(15543): required-type       : java.util.TreeMap
05-24 08:33:53.404: E/AndroidRuntime(15543): converter-type      : com.thoughtworks.xstream.converters.collections.TreeMapConverter
05-24 08:33:53.404: E/AndroidRuntime(15543): path                : /tree-map
05-24 08:33:53.404: E/AndroidRuntime(15543): version             : 0.0
05-24 08:33:53.404: E/AndroidRuntime(15543): -------------------------------
05-24 08:33:53.404: E/AndroidRuntime(15543):    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
05-24 08:33:53.404: E/AndroidRuntime(15543):    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
[...]
05-24 08:33:53.404: E/AndroidRuntime(15543): Caused by: java.lang.NullPointerException
05-24 08:33:53.404: E/AndroidRuntime(15543):    at java.util.TreeMap.find(TreeMap.java:277)
05-24 08:33:53.404: E/AndroidRuntime(15543):    at java.util.TreeMap.putInternal(TreeMap.java:240)
05-24 08:33:53.404: E/AndroidRuntime(15543):    at java.util.TreeMap.put(TreeMap.java:186)
05-24 08:33:53.404: E/AndroidRuntime(15543):    at java.util.AbstractMap.putAll(AbstractMap.java:381)
05-24 08:33:53.404: E/AndroidRuntime(15543):    at com.thoughtworks.xstream.converters.collections.TreeMapConverter.populateTreeMap(TreeMapConverter.java:150)
[...]

使用相同的文件。事实上,如果我尝试读取文件,然后将其作为字符串传递给 XStream,我会得到相同的异常(但 XML 字符串创建正常)。

有谁知道可能是什么原因或遇到过同样的问题并知道如何解决?

谢谢!

4

1 回答 1

1

好的,这似乎是 TreeMap 和 Android 的问题......现在使用 HashMap,工作正常 :)

于 2012-06-01T15:31:57.597 回答