Sto solo iniziando a sperimentare con Android Development con SimpleXML e ho pensato che stesse andando abbastanza bene fino a quando non ho avuto un problema. Il seguente codice produce un'eccezione diEccezione Costruttore SimpleXML - Impossibile creare Inner Class
W/System.err (665): org.simpleframework.xml.core.ConstructorException: Impossibile costruire classe interna
Ho guardato attraverso le domande sulle classi interne e penso di capire perché li useresti (non che il mio fosse necessariamente intenzionale) ma nonostante avessi spostato il mio codice per cercare di evitare l'utilizzo, sono ancora un po 'bloccato e apprezzerei qualsiasi aiuto.
Source Code:
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;
}
}
}
Con il file XML referenziata così strutturato:
<?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>
è il problema di come ho annotato le classi SimpleXML o dove sto cercando leggerli? Grazie!
Grazie per la risposta. La rimozione della notazione di @Root purtroppo non ha avuto alcun effetto. Attualmente entrambe le classi sono dichiarate all'interno della classe Activity dopo che onCreate() è stato chiuso - dovrebbero trovarsi in file diversi? – Rory
Sì, tutte le normali classi pubbliche in Java devono essere dichiarate nel proprio file. Un'altra opzione sarebbe quella di renderli 'static' (non so come SimpleXML gestisca questo). –
Averli nello stesso file era sicuramente il problema =) – Rory