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的字段。使用非私有字段将避免警告和轻微的性能下降。
用法:
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中引入任何代码,因此您可以随意使用它。