我正在尝试使用XStream从XML文件中读取TreeMap(我之前也使用XStream创建了XML文件)。
我只是在类
的静态方法中执行此操作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)
[...]
使用相同的文件。实际上,如果我尝试读取文件然后将其作为String传递给XStream,我会得到相同的异常(但是XML String创建正常)。
是否有人知道原因可能是什么或遇到过同样的问题并知道如何解决?
谢谢!
答案 0 :(得分:1)
好吧,这似乎是TreeMap和Android的一个问题...现在使用HashMap,工作正常:)