使用“简单”XML序列化从Android上的res / raw加载数据

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

我的代码看起来像这样:

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); } } 

我的class级看起来像这样:

 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文件,并在应用程序启动时将每个文件反序列化为它自己的类实例,并在数组中提供所有这些文件以供查找。

感谢您抽出宝贵时间阅读并思考这一点。

我已按如下方式更改myClickHandler以首先validationxml:

 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看起来像这样:

   false 0  

似乎与序列化程序一起使用的任何方法都会导致类型exception的未处理exception,因为我使用serializer.validate也会导致同样的问题。 我错过了SimpleXML所需的东西吗?

我会尝试使用getter和setter将这些字段定义为属性。 我不知道SimpleXML如何与公共字段一起使用。 这也是糟糕的设计。