2011-12-10 18 views
7

नहीं बना सकता है, मैं बस सरल एक्सएमएल के साथ एंड्रॉइड डेवलपमेंट के साथ प्रयोग करना शुरू कर रहा हूं और सोचा कि जब तक मैं एक झटके मारता हूं तब तक यह काफी अच्छा चल रहा था। नीचे दिए गए कोड कीSimpleXML कन्स्ट्रक्टर अपवाद - इनर क्लास

डब्ल्यू/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 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 कक्षाएं टिप्पणी किए गए या मैं कहाँ कोशिश कर रहा हूँ के साथ समस्या यह है उन्हें पढ़ने के लिए? धन्यवाद!

उत्तर

5

allergy कक्षा से @Root को हटाने का प्रयास करें।

इसके अलावा: क्या आपके पास यह दो कक्षाएं अलग-अलग फ़ाइल में हैं: allergy.java और medalertdata.java?

+0

उत्तर के लिए धन्यवाद। दुर्भाग्यवश @ रूट नोटेशन को हटाने से कोई प्रभाव नहीं पड़ा। वर्तमान में दोनों वर्गों को गतिविधि वर्ग के भीतर घोषित किया गया है (क्रिएट) को बंद कर दिया गया है - क्या वे अलग-अलग फाइलों में हो सकते हैं? – Rory

+4

हां, जावा में सभी सामान्य सार्वजनिक कक्षाएं अपनी फ़ाइल में घोषित की जानी चाहिए। एक और विकल्प उन्हें 'स्थैतिक' बनाना होगा (यह नहीं पता कि SimpleXML कैसे इसे संभालता है)। –

+2

उन्हें एक ही फाइल में रखना निश्चित रूप से समस्या थी =) – Rory

12

मैं जावा ऑब्जेक्ट्स में कुछ गहरा घोंसला वाले XML डेटा को पढ़ने के दौरान भी इसमें भाग गया (और उसी फ़ाइल में कक्षाओं को परिभाषित करके वस्तु संरचना को सरल रखना चाहता हूं)।

समाधान (कि अलग फ़ाइलों में विभाजित शामिल नहीं है) नेस्टेड कक्षाएं स्थिर बनाने के लिए किया गया था। (दूसरे शब्दों में, inner classes into static nested classes परिवर्तित करें।) किंडा पूर्वदर्शी में स्पष्ट है।

उदाहरण;
नेस्टेड संरचना:

// 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; 
    } 

    // ... 
} 

अस्वीकरण: मुझे पता ओपी मिला समस्या पहले से ही हल किया, लेकिन शायद यह जो दूसरों org.simpleframework.xml.core.ConstructorException: Can not construct inner class में चलाने और परिभाषित करने के लिए नहीं करना चाहते हैं मदद करता है Peter's answer के रूप में अलग फ़ाइलों में कक्षाएं बताती हैं।

+3

धन्यवाद।अलग-अलग फ़ाइलों में सिंगल-उपयोग कक्षाओं के समूह को विभाजित करने से यह बहुत साफ महसूस करता है। –

संबंधित मुद्दे