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

最初に xml を検証するために、次のように myClickHandler を変更しました。

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

ゲッターとセッターを使用して、これらのフィールドをプロパティとして定義しようとします。SimpleXML が public フィールドでどのように機能するかはわかりません。これもデザインが悪い。

于 2011-07-18T18:35:15.670 に答える