Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleXML构造函数异常-无法创建内部类_Java_Android_Inner Classes_Simple Framework - Fatal编程技术网

Java SimpleXML构造函数异常-无法创建内部类

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

我刚刚开始用SimpleXML进行Android开发的实验,并认为它进行得相当顺利,直到遇到了一个障碍。下面的代码生成一个异常

W/System.err(665):org.simpleframework.xml.core.constructor异常:无法构造内部类

我已经仔细阅读了关于内部类的问题,我想我理解了为什么要使用它们(我的问题不一定是故意的),但是尽管为了避免使用我的代码,我还是有点卡住了,希望能得到任何帮助

源代码:

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说得对。谢谢。这感觉比将一堆单一用途的类拆分成单独的文件要干净得多。这是一个非常有用的答案。谢谢