Java SimpleXML构造函数异常-无法创建内部类
我刚刚开始用SimpleXML进行Android开发的实验,并认为它进行得相当顺利,直到遇到了一个障碍。下面的代码生成一个异常 W/System.err(665):org.simpleframework.xml.core.constructor异常:无法构造内部类 我已经仔细阅读了关于内部类的问题,我想我理解了为什么要使用它们(我的问题不一定是故意的),但是尽管为了避免使用我的代码,我还是有点卡住了,希望能得到任何帮助 源代码:Java SimpleXML构造函数异常-无法创建内部类,java,android,inner-classes,simple-framework,Java,Android,Inner Classes,Simple Framework,我刚刚开始用SimpleXML进行Android开发的实验,并认为它进行得相当顺利,直到遇到了一个障碍。下面的代码生成一个异常 W/System.err(665):org.simpleframework.xml.core.constructor异常:无法构造内部类 我已经仔细阅读了关于内部类的问题,我想我理解了为什么要使用它们(我的问题不一定是故意的),但是尽管为了避免使用我的代码,我还是有点卡住了,希望能得到任何帮助 源代码: public class InCaseOfEmergencyMed
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;
}
}
CaseofEncymedalerAllegesActivity中的公共类扩展了活动{
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Serializer Serializer=new Persister();
InputStream xmlstream=this.getResources().openRawResource(R.raw.sample\u data\u-allergies);
试一试{
medalertdata allergyObject=serializer.read(medalertdata.class,xmlstream);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
setContentView(R.layout.allergies);
}
@根
公共类数据{
@元素列表
私人名单;
公众过敏名单{
返回过敏列表;
}
}
@根
公共课过敏{
@元素
私有字符串到;
@元素
私营医疗机构;
@元素
私人弦乐;
公众过敏(字符串到、布尔医学、字符串注释){
这个;
这是医学上的;
this.notes=注释;
}
公共字符串getTo(){
返回;
}
公共医疗{
返回医疗;
}
公共字符串getNotes(){
回条;
}
}
}
引用的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类的,还是在哪里读取它们的?谢谢 尝试从
类中删除@Root
另外:在它的单独文件中是否有这两个类:allergy.java和medalertdata.java?我在将一些深度嵌套的XML数据读入java对象时也遇到了这个问题(并且希望通过在同一个文件中定义类来保持对象结构的简单性)
解决方案(不涉及拆分成单独的文件)是使嵌套类静态。(换句话说,转换)在回顾中有点明显
榜样
嵌套结构:
// ScoreData
// Sport
// Category
// Tournament
爪哇:
@Root
public class ScoreData {
@ElementList(entry = "Sport", inline = true)
List<Sport> sport;
static class Sport {
@ElementList(entry = "Category", inline = true)
List<Category> category;
}
// ...
}
@Root
公共类分数数据{
@元素列表(entry=“Sport”,inline=true)
列出运动项目;
静态类运动{
@元素列表(entry=“Category”,inline=true)
清单类别;
}
// ...
}
免责声明:我意识到OP已经解决了问题,但这可能会帮助其他遇到问题的人
org.simpleframework.xml.core.constructoreException:无法构造内部类
,并且不希望按照建议在单独的文件中定义类。感谢您的回复。不幸的是,删除@Root符号没有任何效果。目前,这两个类都是在关闭onCreate()后在Activity类中声明的-它们应该在不同的文件中吗?是的,Java中的所有普通公共类都必须在它们自己的文件中声明。另一个选择是使它们静态(不知道SimpleXML如何处理这个问题)。将它们放在同一个文件中肯定是个问题=)谢谢!正如Peter所建议的,如果您将内部类声明为静态(请参见这里的示例:)的话,它们可以位于同一个文件中。我有一个类似的问题(“无法构造内部类”),并通过将我的内部类(非静态嵌套类)转换为静态嵌套类解决了这个问题。所以@PeterKnego说得对。谢谢。这感觉比将一堆单一用途的类拆分成单独的文件要干净得多。这是一个非常有用的答案。谢谢