Vì không có câu trả lời, tôi sẽ cố gắng tiết kiệm thời gian quý báu cho bất kỳ ai đến đây.
Tôi không tìm thấy nguyên nhân và vì tôi không có thời gian để phân tích các thư viện đơn giản, tôi đã đưa ra một "workaroud". Đó là nhiều hơn một lời khuyên, thực sự - không sử dụng nó cho (marshaling) tạo xml nếu bạn có một định nghĩa xml lớn và thứ tự các vấn đề (một quy tắc nhiều hơn một ngoại lệ). Thứ tự được sử dụng chủ yếu cho marshaling anyway vì vậy chỉ cần tiết kiệm cho mình một số thời gian và làm điều đó bằng tay.
Mẫu:
<document>
<name>$NAME$</name>
<isTrue>$IS_TRUE$</isTrue>
</document>
Lớp:
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;
}
}
Các thử nghiệm:
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);
}
}
Không thực sự là một câu trả lời, nhưng tiết kiệm cho mình một chút thời gian và không sử dụng Đơn giản (một thư viện tuyệt vời) trên Android ...
Bạn đã tìm thấy giải pháp nào hay lý do khiến ứng dụng Android không giữ được thứ tự? Có khả năng là phiên bản Android XPP gây ra điều này? – pfh
[Tôi đã trả lời câu hỏi đó tại đây] (https://stackoverflow.com/a/48677998/3847464) –