java - Parceler 和 SimpleXml 如 Parceler 的自述文件所述

标签 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() 吗?

如果有人可以向我指出资源,我可以进行自己的研究。我只是找不到任何起点。

最佳答案

这是同时支持 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 的字段。使用非私有(private)字段将避免警告和轻微的性能影响。

用法:

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 中引入任何代码,所以您可以随意使用它。

关于java - Parceler 和 SimpleXml 如 Parceler 的自述文件所述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36807463/

相关文章:

java - JAXB 注释将 XML 内容绑定(bind)为字符串

java - 键盘快捷键和 Action 监听器

java - SQLite 'BETWEEN' 的行为不符合预期

android - 如何检测 appium(java) 中 View 的变化 :android

android - 无法在 Mac 中启动 android 模拟器

java - SimpleXML 解析不适​​用于 @ElementList

android - 简单 XML - 即使提要具有 "changed"并且已添加新属性,如何成功解析?

java - 通过 ColdFusion 访问 JNI DLL 中的功能

android - 我想在Android中制作一个简单的YouTube播放器,但官方示例不起作用。我迷路了,我应该从哪里开始?

java - 如何使用 XML 框架简单生成以下 XML 文件