【问题标题】:SimpleXML on Android and error while deserializationAndroid上的SimpleXML和反序列化时出错
【发布时间】:2012-11-01 22:43:07
【问题描述】:

我正在尝试使用 SimpleXML 反序列化 Android 设备上的对象。在一个 maven 文件中,我使用了带有排除项的依赖项(我遵循了另一个问题中的建议,因为不排除这些依赖项,我无法启动应用程序):

<dependency>
    <groupId>org.simpleframework</groupId>
    <artifactId>simple-xml</artifactId>
    <version>2.6.7</version>
     <exclusions>
    <!-- StAX is not available on Android -->
    <exclusion>
        <artifactId>stax</artifactId>
        <groupId>stax</groupId>
    </exclusion>
    <exclusion>
        <artifactId>stax-api</artifactId>
        <groupId>stax</groupId>
    </exclusion>
    <!-- Provided by Android -->
    <exclusion>
        <artifactId>xpp3</artifactId>
        <groupId>xpp3</groupId>
    </exclusion>
</exclusions>

为了测试,我只写了一个简单的类:

class Test {
        String s;
    }

我尝试获取一个对象:

Test t = null;
try {
    t = serializer.read(Test.class, source);
} catch (Exception e) {
    e.printStackTrace();
}

Log.v("t",t.s);

但在最后一行,当我尝试读取字段 t.s 时,我收到如下错误:

Could not find method javax.xml.stream.XMLInputFactory.newInstance, referenced from method org.simpleframework.xml.stream.StreamProvider.<init>

unable to resolve static method 3372: Ljavax/xml/stream/XMLInputFactory;.newInstance ()Ljavax/xml/stream/XMLInputFactory;

dead code 0x0006-0009 in Lorg/simpleframework/xml/stream/StreamProvider;.<init> 

unable to find class referenced in signature (Ljavax/xml/stream/XMLEventReader;)

问题的原因可能是什么,我该如何解决?

【问题讨论】:

  • 请告诉我们另一个问题是什么。否则,您可能希望删除您的排除项并使用 latstet Simplxml - 框架版本并从那里开始。
  • @wolfgang-fahl 另一个问题在这里:stackoverflow.com/questions/5964668/… 最后我使用了 Gson,我没有遇到任何问题。
  • 你能发布你的xml吗?

标签: java android deserialization unmarshalling simple-framework


【解决方案1】:

您必须为您的班级添加注释。我用 Simple XML 2.6.9 做了一个小测试(仅限simple-xml-2.6.9.jar) --> 没问题。

XML:

<test>
   <s>abc</s>
</test>

测试类:

@Root
public class Test
{
    @Element
    String s;


    @Override
    public String toString()
    {
        return "Test{" + "s=" + s + '}';
    }
}

反序列化 XML:

final File f =  ...


Serializer ser = new Persister();
Test t = ser.read(Test.class, f);

System.out.println(t);

输出:

Test{s=abc}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2011-02-27
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多