我刚刚开始尝试使用SimpleXML进行Android开发,并认为它很顺利,直到我遇到麻烦。下面的代码产生了
的例外W / System.err(665):org.simpleframework.xml.core.ConstructorException:无法构造内部类
我已经查看了关于内部类的问题并且认为我理解你为什么要使用它们(不是我的必然是有意的)但是尽管我的代码移动以试图避免使用我仍然有点卡住并且会感谢任何帮助。
源代码:
public class InCaseOfEmergencyMedAlertAllergiesActivity extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Serializer serializer = new Persister();
InputStream xmlstream = this.getResources().openRawResource(R.raw.sample_data_allergies);
try {
medalertdata allergyObject = serializer.read(medalertdata.class, xmlstream);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setContentView(R.layout.allergies);
}
@Root
public class medalertdata {
@ElementList
private List<allergy> allergyList;
public List getAllergies() {
return allergyList;
}
}
@Root
public class allergy{
@Element
private String to;
@Element
private Boolean medical;
@Element
private String notes;
public allergy(String to, Boolean medical, String notes){
this.to = to;
this.medical = medical;
this.notes = notes;
}
public String getTo() {
return to;
}
public Boolean getMedical() {
return medical;
}
public String getNotes() {
return notes;
}
}
}
引用的XML文件结构为:
<?xml version="1.0" encoding="ISO-8859-1"?>
<medalertdata>
<allergy>
<to>Penicillin</to>
<medical>true</medical>
<notes></notes>
</allergy>
<allergy>
<to>Bee Stings</to>
<medical>false</medical>
<notes>Sample</notes>
</allergy>
</medalertdata>
我是如何注释SimpleXML类或我试图读取它们的问题?谢谢!
答案 0 :(得分:12)
我在将一些深度嵌套的XML数据读入Java对象时也遇到了这种情况(并希望通过在同一文件中定义类来保持对象结构简单)。
解决方案(不涉及拆分为单独的文件)是使嵌套类静态。 (换句话说,转换inner classes into static nested classes。)有点回顾。
实施例;
嵌套结构:
// ScoreData
// Sport
// Category
// Tournament
Java:
@Root
public class ScoreData {
@ElementList(entry = "Sport", inline = true)
List<Sport> sport;
static class Sport {
@ElementList(entry = "Category", inline = true)
List<Category> category;
}
// ...
}
免责声明:我发现OP已经解决了问题,但也许这有助于其他人遇到问题
org.simpleframework.xml.core.ConstructorException: Can not construct inner class
并且不希望在Peter's answer建议的单独文件中定义类。
答案 1 :(得分:5)
尝试从@Root
类中删除allergy
。
另外:你在这个单独的文件中是否有这两个类:allergy.java和medalertdata.java?