2

我是 Java 和 Android 开发的新手,所以请记住这一点。我的目标是从打包到我的应用程序中的 xml 文件中反序列化数据。我正在尝试使用 Simple 2.4 执行此操作,但在使用 .read 或 .write 时,我在代码中收到“未处理的异常类型异常”错误

我的代码看起来像这样:

import java.io.InputStream;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

public class ftRoster extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //Load in all available ship files here
    }

    public void myClickHandler(View view)
    {

     InputStream iStream = getResources().openRawResource(R.raw.ship);
     Serializer serializer = new Persister();
     ShipSystem newSystem = serializer.read(ShipSystem.class, iStream);

 }
}

我的课看起来像这样:

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root
public class ShipSystem
{
 @Element
 public String id = null;

 @Element
 public boolean destroyed = false;

 @Element
 public int systemValue = 0;

}

如果我在它周围放了一个 try / catch,当然错误就会消失,但是反序列化也永远不会发生。关于 Simple 的讨论很少,文档使它看起来像 C# 序列化一样简单。任何帮助将不胜感激。

我想要做的全局视图是为每个“shipSystem”创建一个 xml 文件,并在应用程序启动时将每个文件反序列化到它自己的类实例中,并将所有这些都放在一个数组中以供查找。

感谢您花时间阅读和思考这个问题。

4

2 回答 2

0

我已将 myClickHandler 更改如下以首先验证 xml:

public void myClickHandler(View view)
{
    InputStream iStream = getResources().openRawResource(R.raw.system);
    Serializer serializer = new Persister();

    if(serializer.validate(ShipSystem.class, iStream))
    {
        ShipSystem newSystem = serializer.read(ShipSystem.class, iStream);
    }           
}

我已经改变了我的班级看起来像这样:

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root(name="system")
public class ShipSystem
{
    @Attribute
    public String id = "0";

    @Element
    public boolean destroyed = false;

    @Element
    public int systemValue = 0;

}

我试图反序列化的 xml 看起来是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<system id="0">
    <destroyed>false</destroyed>
    <systemValue>0</systemValue>
</system>

似乎与序列化程序一起使用的任何方法都会导致异常类型的未处理异常,因为我对 serializer.validate 的使用也会导致同样的问题。我是否遗漏了 SimpleXML 所需的内容?

于 2010-12-21T06:16:31.457 回答
0

我会尝试使用 getter 和 setter 将这些字段定义为属性。我不知道 SimpleXML 与公共领域的合作有多好。这也是糟糕的设计。

于 2011-07-18T18:35:15.670 回答