簡體   English   中英

使用“簡單” XML序列化從Android上的res / raw加載數據

[英]Using “Simple” XML Serialization to load data from res/raw on Android

我是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;

}

如果我嘗試一下/抓住它,錯誤當然會消失,但是絕不會發生反序列化。 關於Simple的討論很少,文檔使它看起來像C#序列化一樣簡單。 任何幫助將不勝感激。

我要執行的操作的全局視圖是為每個“ shipSystem”創建一個xml文件,並在應用程序啟動時將每個序列反序列化為它自己的類實例,並將所有這些都放在數組中以供查找。

感謝您抽出寶貴的時間來閱讀和思考。

我將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所需的內容?

我將嘗試使用getter和setter將這些字段定義為屬性。 我不知道SimpleXML在公共字段上有多好。 同樣,這也是糟糕的設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM