10

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クラスに注釈を付ける方法、またはそれらを読み込もうとしている場所に問題がありますか?ありがとう!

4

2 に答える 2

15

深くネストされたXMLデータをJavaオブジェクトに読み込んでいるときにもこれに遭遇しました(同じファイルでクラスを定義することにより、オブジェクト構造を単純に保ちたいと考えています)。

解決策(個別のファイルへの分割を伴わない)は、ネストされたクラスを静的にすることでした。(言い換えると、内部クラスを静的なネストされたクラスに変換します。)振り返ってみると明らかです。

例;
ネストされた構造:

// 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はすでに問題を解決していることを認識していますが、これは 、 Peterの回答が示唆org.simpleframework.xml.core.ConstructorException: Can not construct inner classするように、別のファイルでクラスを定義したくない他の人に役立つかもしれません。

于 2013-04-17T14:38:22.670 に答える
6

クラス@Rootから削除してみてください。allergy

また、この2つのクラスがそれぞれ別個のファイルにありますか:allergy.javaとmedalertdata.java?

于 2011-12-10T19:20:33.313 に答える