Я пытаюсь использовать XStream для (де) сериализации HashMap некоторых из моих собственных классов в приложении для Android. Например, одним из классов является Word, который имеет следующие переменные:
private String word;
private boolean capitalizable;
private int useCount;
private HashMap<Character,Integer> endPunctuation;
private HashSet<String> nextWritables;
У меня уже есть все настройки, работающие в стандартном Java-приложении, я просто пытаюсь обернуть все это в пользовательский интерфейс Android (который работает отлично). Сериализация прекрасно работает в Android. Проблема, с которой я столкнулся, заключается в том, что при десериализации я получаю следующую ошибку:
com.thoughtworks.xstream.converters.ConversionException: Cannot construct chatai.Word as it does not have a no-args constructor : Cannot construct chatai.Word as it does not have a no-args constructor
---- Debugging information ----
message : Cannot construct chatai.Word as it does not have a no-args constructor
cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException
cause-message : Cannot construct chatai.Word as it does not have a no-args constructor
class : java.util.HashMap
required-type : chatai.Word
path : /map/entry/chatai.Word
line number : 1
-------------------------------
Я получаю эту ошибку, если я использую любую версию XStream, кроме 1.4.1, в своем настольном приложении. Я всегда получаю сообщение об ошибке в приложении для Android, независимо от версии XStream. Я уверен, что у настольного компьютера есть эта проблема, потому что он работает на Java 7. Я не уверен насчет Android. Это как-то связано с отражением из-за этого предупреждения при добавлении xstream-1.4.1.jar:
[2011-09-07 21:06:52 - DroidBot] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(com.thoughtworks.xstream.XStream$2) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
Быстрый тест показывает, что сериализация и десериализация объекта String в Android работает нормально. Как я могу избавиться от этой ошибки?