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:
- Agregar JsonArray a JsonObject generó caracteres de escape (gson)
- Android JSon error "Esperaba BEGIN_OBJECT pero era BEGIN_ARRAY en la línea 1 columna 2"
- ¿Cómo puedo enviar los encabezados de autenticación básica HTTP en Android?
- Analizar el objeto JSON con gson
- Android Parse JSON atascado en obtener tarea
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.
- Cómo mantener múltiples google-service.json en Android Studio
- Android - Error en la conexión http java.net.UnknownHostException:
- Retrofit 2: enviar archivos con el objeto json
- Retrofit 2.0 Convertor devuelve NULL
- Múltiples elementos seleccionados RecyclerView in Activity.java
- Recuperación de JSON desde URL en Android
- Org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Campo no reconocido "id" (Criterios de clase), no marcado como ignorable
- Cómo pasar JSON Array utilizando objeto JSON
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