FlexJson ClassNotFound Exception en Android 4.4.4
Tengo un proyecto multidex para dispositivos Android. Yo uso Flexjson. Ya lo he probado con flexjson 3.3 y 2.x.
Funciona perfectamente bien con Android 5.x, pero se bloquea en Android 4.4.4.
- JSON: Parser de corriente de Jackson - ¿realmente vale la pena?
- Android JSON a PHP Server y volver
- Org.json.JSONException: Cadena no terminada en el carácter 1834
- Retrofit - eliminando algunos caracteres inválidos del cuerpo de respuesta antes de analizarlo como json
- Cómo recuperar una lista específica de datos de firebase
Parece que la biblioteca de soporte de Dex no funciona propperly con versiones anteriores de Android, pero no puedo decir.
Aquí está mi stacktrace:
06-29 03:50:44.763 11884-11884/com.pigdroid.gameboard E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.pigdroid.gameboard, PID: 11884 flexjson.JSONException: [ layers.values ]: Could not load com.pigdroid.game.board.tile.model.IntTileLayer at flexjson.ObjectBinder.findClassInMap(ObjectBinder.java:250) at flexjson.ObjectBinder.findClassName(ObjectBinder.java:213) at flexjson.ObjectBinder.bind(ObjectBinder.java:92) at flexjson.ObjectBinder.bindIntoCollection(ObjectBinder.java:110) at flexjson.factories.ListObjectFactory.instantiate(ListObjectFactory.java:13) at flexjson.ObjectBinder.bind(ObjectBinder.java:95) at flexjson.ObjectBinder.bindIntoObject(ObjectBinder.java:149) at flexjson.factories.ExistingObjectFactory.instantiate(ExistingObjectFactory.java:25) at flexjson.ObjectBinder.bind(ObjectBinder.java:95) at flexjson.ObjectBinder.bind(ObjectBinder.java:74) at flexjson.JSONDeserializer.deserialize(JSONDeserializer.java:241) at flexjson.JSONDeserializer.deserializeInto(JSONDeserializer.java:301) at com.pigdroid.game.model.memento.UndoableObject.from(UndoableObject.java:35) at com.pigdroid.game.controller.GameController.loadModelFromSerialized(GameController.java:108) at com.pigdroid.gameboard.view.detail.game.tile.TileBoardGameFragmentController.setGame(TileBoardGameFragmentController.java:692) at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.onKickOff(GameDetailFragment.java:168) at com.pigdroid.gameboard.view.ServiceFragment.kickOffIf(ServiceFragment.java:71) at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.kickOffIf(GameDetailFragment.java:159) at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:52) at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:48) at com.pigdroid.android.hateaidl.HateAIDLConnection$3.onServiceConnected(HateAIDLConnection.java:118) at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1101) at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1118) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.pigdroid.game.board.tile.model.IntTileLayer" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:497) at java.lang.ClassLoader.loadClass(ClassLoader.java:457) at android.app.LoadedApk$WarningContextClassLoader.loadClass(LoadedApk.java:430) at flexjson.ObjectBinder.findClassInMap(ObjectBinder.java:243) at flexjson.ObjectBinder.findClassName(ObjectBinder.java:213) at flexjson.ObjectBinder.bind(ObjectBinder.java:92) at flexjson.ObjectBinder.bindIntoCollection(ObjectBinder.java:110) at flexjson.factories.ListObjectFactory.instantiate(ListObjectFactory.java:13) at flexjson.ObjectBinder.bind(ObjectBinder.java:95) at flexjson.ObjectBinder.bindIntoObject(ObjectBinder.java:149) at flexjson.factories.ExistingObjectFactory.instantiate(ExistingObjectFactory.java:25) at flexjson.ObjectBinder.bind(ObjectBinder.java:95) at flexjson.ObjectBinder.bind(ObjectBinder.java:74) at flexjson.JSONDeserializer.deserialize(JSONDeserializer.java:241) at flexjson.JSONDeserializer.deserializeInto(JSONDeserializer.java:301) at com.pigdroid.game.model.memento.UndoableObject.from(UndoableObject.java:35) at com.pigdroid.game.controller.GameController.loadModelFromSerialized(GameController.java:108) at com.pigdroid.gameboard.view.detail.game.tile.TileBoardGameFragmentController.setGame(TileBoardGameFragmentController.java:692) at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.onKickOff(GameDetailFragment.java:168) at com.pigdroid.gameboard.view.ServiceFragment.kickOffIf(ServiceFragment.java:71) at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.kickOffIf(GameDetailFragment.java:159) at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:52) at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:48) at com.pigdroid.android.hateaidl.HateAIDLConnection$3.onServiceConnected(HateAIDLConnection.java:118) at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1101) at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1118) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method)
EDIT: He llenado un problema para el equipo de desarrollo de Android y han notado el error como una característica, incluso cuando funciona perfectamente bien en versiones posteriores. Si alguno encontró este anoying, intenta votar por la reapertura: https://code.google.com/p/android/issues/detail?id=178607
- Gridview - Haga clic en la imagen para ver la imagen en Viewpager
- Android - La llamada requiere el nivel 9 de API (el min actual es 8): android.os.StrictMode # setThreadPolicy
- Cómo analizar correctamente la API de Reddit en Android
- Cómo obtener cadena de JSONObject sin nombre específico
- Cómo convertir JSONArray a ListView?
- Convertir InputStream a JSONObject
- Android JSON CharSet UTF-8 problemas
- Ejemplo de inicio de sesión en Android mediante el método POST que utiliza la API REST
He echado un vistazo al método fallando ObjectBinder.findClassInMap
que obtienen el cargador de clase como este: ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Supongo que hay una mala instalación del cargador de la clase multi dex porque he configurado el cargador yo mismo antes de que ocurra mi deserialización y arregló el problema.
La línea fixin 'el error que he añadido justo antes de cargar mi modelo de juego va como esto:
Thread.currentThread().setContextClassLoader(owner.getActivity().getBaseContext().getClassLoader());
- No se puede cargar el archivo xml con jquery en el proyecto de phonegap desde la ruta de los recursos
- Tela / Crashlytics Android añadiendo recursos de cadena para Apikey causas Crashlytics Developer Tools Error