2016-04-23 5 views
1

Parceler readme besagt, dass es mit anderen POJO-basierten Bibliotheken, insbesondere SimpleXML verwendet werden kann.Parceler und SimpleXml wie in Parcelers Readme

Gibt es Beispiele zur Verwendung?

I Parceler mit Gson erfolgreich verwendet haben:

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

Aber ich bin nicht sicher, wo mit SimpleXML zu starten. Im Moment habe ich die folgende SimpleXML Klasse:

@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; 
    } 
} 

Diese Klasse kann dann

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

Mit dem folgenden Code in das folgende XML serialisiert werden:

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

ich zur Zeit eine seltsame Anforderung haben um XML-Attribute und Elemente in einer bestimmten Reihenfolge zu halten. Deshalb verwende ich @Order.

Wie würde Parceler mit SimpleXML arbeiten? Würde ich die Parceler-Instanz an Serializer.write() übergeben?

Wenn mich jemand auf eine Ressource verweisen kann, kann ich meine eigenen Nachforschungen anstellen. Ich konnte einfach keinen Ausgangspunkt finden.

Antwort

1

Hier ist ein Beispiel Ihrer Bean, die beide SimpleXML und Parceler unterstützt:

@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; 
    } 
} 

Bemerkenswert ist diese Konfiguration von Parceler wird Reflektion verwenden, um Ihre Bohne Felder zuzugreifen. Wenn Sie nicht private Felder verwenden, vermeiden Sie eine Warnung und einen leichten Leistungseinbruch.

Verbrauch:

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); 

Da Parceler keinen Code in Ihre Bohne einführt Sie frei sind, mit ihm zu tun, was Sie wollen.

+1

Wow, schön, das ist so eine einfache Anwendung davon! – Vadym