Использование «простой» XML-сериализации для загрузки данных из res / raw на Android - PullRequest
2 голосов
/ 20 декабря 2010

Я новичок в разработке на Java и Android, поэтому имейте это в виду. Моя цель - десериализовать данные из XML-файлов, упакованных в мое приложение. Я пытаюсь сделать это с помощью Simple 2.4, но я получаю ошибку «Unhandled Exception typeception» в коде при использовании .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 # сериализация. Любая помощь будет оценена по этой проблеме.

Глобальное представление о том, что я хочу сделать, - это иметь xml-файл для каждой "shipSystem" и при загрузке приложения десериализовать каждый в свой экземпляр класса и иметь все это в массиве для поиска.

Спасибо, что нашли время, чтобы прочитать и подумать об этом.

Ответы [ 2 ]

0 голосов
/ 18 июля 2011

Я бы попытался определить эти поля как свойства с использованием методов получения и установки. Я не знаю, насколько хорошо SimpleXML работает с открытыми полями. Это тоже плохой дизайн.

0 голосов
/ 21 декабря 2010

Я изменил 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 I 'm попытка десериализации выглядит так:

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

Кажется, что любой метод, используемый с сериализатором, вызывает необработанное исключение типа исключение, потому что мое использование serializer.validate также вызывает ту же проблему.Я что-то упускаю из списка SimpleXML?

...