SimpleXML Constructor Exception – No se puede crear Inner Class

Estoy empezando a experimentar con Android Development con SimpleXML y pensé que iba bastante bien hasta que me golpeó un obstáculo. El código siguiente produce una excepción de

W / System.err (665): org.simpleframework.xml.core.ConstructorException: No se puede construir clase interna

He mirado a través de las preguntas sobre las clases internas y pienso que entiendo por qué las usarías (no que la mía fue necesariamente intencional), pero a pesar de mover mi código redondo para tratar de evitar el uso todavía estoy un poco atascado y agradecería cualquier ayuda .

Código fuente:

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 el archivo XML referenciado estructurado como:

 <?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> 

¿Es el problema de cómo he anotado las clases SimpleXML o donde estoy tratando de leerlas? ¡Gracias!

Intente eliminar @Root de la clase de allergy .

También: ¿tienes estas dos clases cada una en su archivo separado: allergy.java y medalertdata.java?

Me encontré con esto también al leer algunos datos XML profundamente anidados en objetos Java (y querer mantener la estructura del objeto simple mediante la definición de las clases en el mismo archivo).

La solución (que no implica dividir en archivos separados) era hacer que las clases anidadas estuvieran estáticas . (En otras palabras, convierta las clases internas en clases anidadas estáticas .) Un tanto obvio en retrospectiva.

Ejemplo;
Estructura anidada:

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

Exención de responsabilidad: Me doy cuenta de que el OP ya resolvió el problema, pero tal vez esto ayuda a otros que se ejecutan en org.simpleframework.xml.core.ConstructorException: Can not construct inner class y no quieren definir las clases en archivos separados como la respuesta de Peter sugiere .

  • Marco XML simple en android, atributo de clase
  • Uso conveniente de Android XmlResourceParser?
  • Retrofit2 + SimpleXML en Kotlin: MethodException: La anotación debe marcar un método set o get
  • Uso de XML simple y obtención de NoClassDefFoundError en Android
  • Cómo analizar el XML de SimpleXML
  • Uso de SimpleXML con Android y Gradle
  • Android - XML ​​serialization - simpleframework - Ruta con Elementos opcionales (required = false) - ¿Cómo ocultar valores nulos?
  • Android, org.simpleframework.xml Existencia de persistencia, Elemento 'foo' ya se utiliza
  • NullPointerException al usar el archivo XML en res / raw con Proguard
  • Problema de velocidad de Android con la deserialización mediante SimpleXML
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.