Parceler和SimpleXml,如Parceler自述文件中所述

时间:2016-04-23 06:27:40

标签: java android simple-framework parceler

Parceler的自述文件声明它可以与其他基于POJO的库一起使用,特别是SimpleXML。

有没有可用的示例来说明用法?

我已成功使用Parceler和GSON:

Gson gson = new GsonBuilder().create();
ParcelerObj parcelerObj = gson.fromJson(jsonStr, ParcelerObj.class);
String str = gson.toJson(parcelerObj);

但是,我不确定从哪里开始使用SimpleXML。我目前有以下SimpleXML类:

@Root(name="point")
@Order(attributes={"lat", "lon", " alt"})
public class SensorLocation {
    @Attribute
    private double lat;

    @Attribute
    private double lon;

    @Attribute
    private double alt;

    public SensorLocation (
        @Attribute(name="lat") double lat,
        @Attribute(name="lon") double lon,
         @Attribute(name="alt") double alt
    ) {
        this.lat = lat;
        this.lon = lon;
        this.alt = alt;
    }
}

然后可以将此类序列化为以下XML

<point lat="10.1235" lon="-36.1346" alt="10.124"/>

使用以下代码:

SensorLocation sl = new SensorLocation (10.1235, -36.1346, 10.124);
Serializer s = new Persister();
ByteArrayOutputStream out = new ByteArrayOutputStream();
s.write(sl, out);

我目前有一个奇怪的要求,即按特定顺序保留XML属性和元素。这就是我使用@Order

的原因

Parceler如何使用SimpleXML?我会将Parceler实例传递给Serializer.write()吗?

如果有人能指出我的资源,我可以做自己的研究。我无法找到任何起点。

1 个答案:

答案 0 :(得分:1)

以下是支持SimpleXML和Parceler的bean的示例:

@Parcel
@Root(name="point")
@Order(attributes={"lat", "lon", " alt"})
public class SensorLocation {
    @Attribute
    private double lat;

    @Attribute
    private double lon;

    @Attribute
    private double alt;

    @ParcelConstructor
    public SensorLocation (
        @Attribute(name="lat") double lat,
        @Attribute(name="lon") double lon,
        @Attribute(name="alt") double alt
    ) {
        this.lat = lat;
        this.lon = lon;
        this.alt = alt;
    }
}

值得注意的是,Parceler的这种配置将使用反射来访问你的bean的字段。使用非私有字段可以避免警告和轻微的性能损失。

用法:

SensorLocation sl = new SensorLocation (10.1235, -36.1346, 10.124);
Parcelable outgoingParcelable = Parceler.wrap(sl);
//Add to intent, etc.

//Read back in from incoming intent
Parcelable incomingParcelable = ...
SensorLocation sl = Parceler.unwrap(incomingParcelable);
Serializer s = new Persister();
ByteArrayOutputStream out = new ByteArrayOutputStream();
s.write(sl, out);

因为Parceler没有向您的bean中引入任何代码,所以您可以自由地使用它。