Semplice Xml – ordine di elementi non conservati?

Sto utilizzando SimpleXml 2.6.1 nella mia applicazione android. Sebbene la documentazione (http://simple.sourceforge.net/download/stream/doc/javadoc/index.html?org/simpleframework/xml/Order.html) dice che l'ordine degli elementi nel xml è uguale al modo hanno definito nel file di class, ho sempre l'ordine di essere random nel xml. Se aggiungo poche altre variables, l'ordine degli elementi cambia di nuovo.

L'aggiunta di notazione @Order funziona, ma poiché la class è complessa con 100s delle variables, non voglio aggiungere l'ordine. È questo un bug noto per le versioni android? Funziona bene nei programmi di console java.

  • Come rendere il text sul path?
  • Modo protetto per gestire il frammento sul cambiamento di orientamento
  • Non riesco a capire il problema con un errore di stacktrace
  • Styling del button Android Programmaticamente
  • Android EditText + imposta alcune parole a colors
  • Android, setVisibility per non funzionare in RelativeLayout
  • ps: Ho aperto il file .class disassemblato e ho trovato le variables dichiarate nello stesso ordine del file java, quindi non credo che sia un problema di file di class.

  • Come posso trovare tutti i methods non utilizzati del mio progetto nell'IDEA Android Studio?
  • Quando eliminare la directory di cache in Android?
  • La richiesta RequestLocationUpdates di Location Manager è stata chiamata una sola volta
  • Autorizzazione per la creazione di database di Android
  • Effetto di scorrimento con viewpagers multipli
  • Android: scarica file di grandi size
  • 3 Solutions collect form web for “Semplice Xml – ordine di elementi non conservati?”

    Dal momento che non c'è risposta, cercherò di risparmiare tempo prezioso a chiunque vada qui.

    Non ho trovato alcuna causa, e poiché non ho tempo per analizzare biblioteche semplici, ho trovato una "workaroud". È più un consiglio, in realtà – non usarla per (marshalling) creando xml se hai una grande definizione xml e l'ordine è importnte (una regola più che un'exception). L'ordine è utilizzato principalmente per la marshalling comunque così basta risparmiare tempo e farlo manualmente.

    Il model:

    <document> <name>$NAME$</name> <isTrue>$IS_TRUE$</isTrue> </document> 

    La class:

     import org.apache.commons.io.IOUtils; import java.io.IOException; import java.io.InputStream; /** * User: ksaric */ public class SimpleXml { public static final String NAME = "$NAME$"; public static final String IS_TRUE = "$IS_TRUE$"; private String name; private Boolean isTrue; public SimpleXml() { } public Boolean getTrue() { return isTrue; } public void setTrue(Boolean aTrue) { isTrue = aTrue; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { String template = null; try { template = getTemplate(); } catch (IOException e) { e.printStackTrace(); } /* GUAVA - checkNotNull() */ if (null == template) return null; template = template.replace(NAME, getName()); /* OR CONVERT IN THE GETTER METHOD */ template = template.replace(IS_TRUE, getTrue().toString()); return template; } /* SINGLETON? Performance(IO) loss... */ public String getTemplate() throws IOException { InputStream templateStream = getClass().getResourceAsStream("/template.xml"); /* APACHE IO COMMONS */ /* <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> */ final String stringTemplate = IOUtils.toString(templateStream); return stringTemplate; } } 

    Il test:

     import org.junit.Test; import static junit.framework.Assert.*; /** * User: ksaric */ public class SimpleXmlTest { @Test public void test() throws Exception { //Before /* Use standard instantiation, factory method recommended for immutability */ SimpleXml simpleXml = new SimpleXml(); simpleXml.setName("This is a name"); simpleXml.setTrue(false); //When String result = simpleXml.toString(); //Then assertNotNull(result); System.out.println(result); } } 

    Non è veramente una risposta, ma ti salverai un po 'di tempo e non uso Simple (che è una grande libreria) su Android …

     import org.simpleframework.xml.Element; import org.simpleframework.xml.Order; @Order(elements = {"name", "isTrue"}) public class SimpleXml { public static final String NAME = "$NAME$"; public static final String IS_TRUE = "$IS_TRUE$"; @Element private String name; @Element private Boolean isTrue; ... 

    Simple Xml non preserva l'ordine su Android. Sulla base della risposta di pfh, ecco la mia raccomandazione: preferirei utilizzare JAXB nel caso in cui si desidera che l'ordine sia preservato rispetto alla string manuale / analisi del template. JAXB è leggermente complesso da utilizzare rispetto a SimpleXml ma è dotato di set di simili annotazioni basate su serializzazione xml e deserializzazione.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.