Error al intentar probar análisis XML con Robolectric
Estoy usando Robolectric y tratando de probar el análisis de una respuesta XML. Estoy recibiendo la siguiente excepción:
java.lang.NoClassDefFoundError: java/lang/AutoCloseable at android.util.Xml.parse(Xml.java:80) at com.test.app.network.parser.soap.BaseSoapParser.doParse(BaseSoapParser.java:57) at com.test.app.network.parser.soap.RecipeParser.parse(RecipeParser.java:57) at com.test.app.network.command.RecipeCommand.searchRecipes(RecipeCommand.java:64) at com.test.app.data.PrepopulateDB.prepopulateDB(PrepopulateDB.java:53) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:230) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:172) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.ClassNotFoundException: java.lang.AutoCloseable at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at org.robolectric.bytecode.AsmInstrumentingClassLoader.loadClass(AsmInstrumentingClassLoader.java:100) at android.util.Xml.$$robo$$Xml_e8aa_parse(Xml.java:80) at android.util.Xml.parse(Xml.java) at com.test.app.network.parser.soap.BaseSoapParser.doParse(BaseSoapParser.java:57) at com.test.test.app.network.parser.soap.RecipeParser.parse(RecipeParser.java:57) at com.test.app.network.command.RecipeCommand.searchRecipes(RecipeCommand.java:64) at com.test.app.data.PrepopulateDB.prepopulateDB(PrepopulateDB.java:53) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) ... 22 more
La cosa es que "AutoCloseable" fue agregado solamente en Java 7 y puesto que el androide utiliza Java 6 puedo entender porqué la clase no se encuentra – cualquier ayuda será apreciada.
- NetworkOnMainThread
- Parse Arabic XML en Android
- Diferencia entre setContentView y LayoutInflater
- Analizando espermas inválidos con XmlPullParsers de Android
- Pasar recurso XML a XMLReader
Bibliotecas:
Robolectric-2.3-20140204.032758-112-jar-with-dependencies.jar
Android-all-4.4_r1-robolectric-0.jar / android-all-4.3_r2-robolectric-0.jar
Actualización: He probado esto con JDK 6 y Target API 18 con el mismo resultado.
Actualización 2: Parece que el origen del problema es esta clase: org.apache.harmony.xml.ExpatReader está utilizando AutoClosable que no está disponible en Java 6 o Android API 18.
- XmlPullParser: PI no debe comenzar con xml, pero solo en Android 2.3.3 hacia abajo
- Analizar archivo xml utilizando java para - aplicación basada en android
- No se puede resolver el símbolo HttpEntity, HttpResponse
- Los valores de los hiladores no están ajustados correctamente
- Consumir servicio REST Web y analizar datos XML en Android
- Adview error de análisis de XML sin consolidar prefijo Android
- ¿Cómo puedo analizar XML android?
- Cómo jugar radio en línea url de streaming en Android. Cómo jugar .pls radio streaming url en android
En realidad esta interfaz está en el SDK de Android: https://developer.android.com/reference/java/lang/AutoCloseable.html
Se agrega en el nivel API 19
Antes del nivel 19, estaba allí pero "escondido".
Este error ocurre cuando compila su proyecto con una versión de API más alta que algunas de las clases requeridas, su objetivo es API 18, pero como Guillaume sais, al usar AutoCloseable está intentando cargar una clase que no se añade hasta que la API 19 .Su aplicación se bloquea en tiempo de ejecución. Necesitas modificar la versión minSDK de tu proyecto o considerar una alternativa.
Descargue el paquete SDK [1], extráigalo y luego actualice / sobrescriba su Eclipse y Android SDK (solo haga una copia de seguridad de eclipse y de la carpeta android-sdk de antemano). Por supuesto luego hacer todas las actualizaciones necesarias en el SDK y Eclipse IDE
- La alineación vertical del texto del botón está desactivada en Android
- WebView no carga los activos correctamente