NoMethodError en el objeto de ejecución estándar de Android
Heya, tengo un error muy extraño que no puedo resolver cuando intento serializar objetos a JSON en todas las plataformas android, de 1.5 a 2.2 (tanto en teléfonos como emuladores).
Recibo este error:
- Respuesta HTML desde el servidor
- Devolver una gota con json
- MultipartEntity y Json
- Necesito descargar varias imágenes al directorio para poder acceder al contenido sin conexión
- ¿Cómo se puede pasar JSON a AngularJS en la vista web de Android?
E/AndroidRuntime(21017): Uncaught handler: thread AsyncTask #2 exiting due to uncaught exception E/AndroidRuntime(21017): java.lang.RuntimeException: An error occured while executing doInBackground() E/AndroidRuntime(21017): at android.os.AsyncTask$3.done(AsyncTask.java:200) E/AndroidRuntime(21017): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) E/AndroidRuntime(21017): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) E/AndroidRuntime(21017): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) E/AndroidRuntime(21017): at java.util.concurrent.FutureTask.run(FutureTask.java:137) E/AndroidRuntime(21017): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) E/AndroidRuntime(21017): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) E/AndroidRuntime(21017): at java.lang.Thread.run(Thread.java:1096) E/AndroidRuntime(21017): Caused by: java.lang.NoSuchMethodError: org.json.JSONStringer.object E/AndroidRuntime(21017): at com.qype.radar.api.json.JsonSerializationHelper.startModel(JsonSerializationHelper.java:119) E/AndroidRuntime(21017): at com.qype.radar.api.json.JsonSerializationHelper.serializeCheckin(JsonSerializationHelper.java:94) E/AndroidRuntime(21017): at com.qype.radar.api.QypeApiImpl.submitCheckin(QypeApiImpl.java:157) E/AndroidRuntime(21017): at com.qype.radar.activities.tasks.SubmitCheckinTask.doCheckedInBackground(SubmitCheckinTask.java:29) E/AndroidRuntime(21017): at com.qype.radar.activities.tasks.SubmitCheckinTask.doCheckedInBackground(SubmitCheckinTask.java:1) E/AndroidRuntime(21017): at com.github.droidfu.concurrent.BetterAsyncTask.doInBackground(BetterAsyncTask.java:154) E/AndroidRuntime(21017): at android.os.AsyncTask$2.call(AsyncTask.java:185) E/AndroidRuntime(21017): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) E/AndroidRuntime(21017): ... 4 more
Al llegar a la línea 'stringer.object' de 'startModel ()' al serializar una revisión en este código:
package com.qype.radar.api.json; import org.json.JSONException; import org.json.JSONStringer; import com.qype.radar.model.Review; public class JsonSerializationHelper { private JSONStringer stringer = new JSONStringer(); ... public String serializeReview(Review review) throws JSONException { startModel("review"); value("rating", review.getRating()); value("language", review.getLanguage()); value("content", review.getText()); return endModel(); } ... private JSONStringer startModel(String name) throws JSONException { stringer.object(); stringer.key(name); stringer.object(); return stringer; } private String endModel() throws JSONException { stringer.endObject(); stringer.endObject(); return stringer.toString(); } private void value(String key, String value) throws JSONException { stringer.key(key); stringer.value(value); } private void value(String key, int value) throws JSONException { stringer.key(key); stringer.value(value); } }
Lo más extraño de esto es que el código se compila bien y al depurar, el objeto JSONStringer se instancia correctamente, pero cualquier llamada a él arroja este error. También puedo, usando la reflexión de Java, descubrir que la clase existe, y los métodos que puedo recuperar del objeto de la clase están todos allí, y pueden ser invocados sin error.
El paquete org.json es un estándar en Android, y está disponible desde la versión 1 de la API.
Cualquier ayuda para resolver este problema sería apreciada, ya que simplemente no sé dónde buscar.
- NoSQL DB para Android que MongoDB y CouchDB?
- LoopJ AndroidAsyncHttp y JSON POST ARRAY
- Cómo evaluar expresiones de usuario en un entorno limitado
- Hacer caso de JsonGetter insensible
- buena json lib como ios JSONModel
- ¿Cómo realizar pruebas sin conexión para aplicaciones que dependen de JSON?
- No puedo recuperar JSONArray desde el servidor IP, pero puedo desde el servidor normal?
- Extraer el cuerpo del mensaje de HttpResponse
Resulta que fue un problema con el Android JAR de Maven Central. Tiene una dependencia de los JAR JSON, pero los que están rotos en Maven Central (la clase JSONStringer está vacía, sólo define un método toString ()).
Si también está utilizando Maven, puede arreglar esto mediante la implementación del tarro androide del SDK utilizando maven-android-sdk-deployer y desde allí.
Ver este hilo
- Robolectric: 3.3.2 – Ningún fichero de manifiesto: build \ intermedios \ manifestos \ lleno \ debug \ src \ main \ AndroidManifest.xml
- CircleCi no puede fallar al resolver herramientas de compilación Android