Android java.lang.IllegalArgumentException: no hay campo de caracteres 'exponencial' en android 2.3
Quiero utilizar el sistema de archivos para almacenar y recuperar los datos. Mi código está funcionando bien en la última versión como android 4.1 y 4.4. Pero no funciona y da error en android 2.3. Escribo el objeto de otra clase y el objeto es Arraylist y también leo el objeto de la misma clase. Por favor, ayúdame. Gracias por adelantado.
Mi clase se da a continuación.
- Uso de genéricos en código Java de Android
- Java.io.NotSerializableException incluso si implemento "Serializable"
- "Unparseable date: 1302828677828" intentando deserializar con Gson una fecha de formato milisegundo recibida del servidor
- Envío de un objeto serializado de Android a un servlet utilizando cliente HTTP
- Rendimiento de la serialización y Google Android
package com.app.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.NumberFormat; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Map.Entry; import java.util.Set; import android.content.Context; import android.util.Log; public final class StorageHelper { public static Set<String> rec_news = new LinkedHashSet<String>(); public StorageHelper() { super(); } public static void writeObject(Context context, String key, Object object) throws IOException, ClassNotFoundException { FileOutputStream fos = context.openFileOutput(key, Context.MODE_PRIVATE); ObjectOutputStream oos = new ObjectOutputStream(fos); /*NumberFormat f = NumberFormat.getInstance(loc); if (f instanceof DecimalFormat) { ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true); }*/ //DecimalFormatSymbols s = new DecimalFormatSymbols() oos.writeObject(object); // error on this line for android 2.3 //object is Arraylist oos.close(); fos.close(); } public static Object readObject(Context context, String key) throws IOException, ClassNotFoundException { FileInputStream fis = context.openFileInput(key); ObjectInputStream ois = new ObjectInputStream(fis); Object object = ois.readObject(); return object; } }
Error
01-22 11:29:36.967: E/AndroidRuntime(6733): FATAL EXCEPTION: main 01-22 11:29:36.967: E/AndroidRuntime(6733): java.lang.IllegalArgumentException: no char field 'exponential' 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.EmulatedFields.put(EmulatedFields.java:459) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.EmulatedFieldsForDumping.put(EmulatedFieldsForDumping.java:83) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.text.DecimalFormatSymbols.writeObject(DecimalFormatSymbols.java:591) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.lang.reflect.Method.invokeNative(Native Method) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.lang.reflect.Method.invoke(Method.java:507) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1219) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1062) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeFields(ObjectOutputStream.java:1008) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.text.DecimalFormat.writeObject(DecimalFormat.java:1215) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.lang.reflect.Method.invokeNative(Native Method) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.lang.reflect.Method.invoke(Method.java:507) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1219) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1143) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1241) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1205) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1143) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1241) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.util.ArrayList.writeObject(ArrayList.java:651) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.lang.reflect.Method.invokeNative(Native Method) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.lang.reflect.Method.invoke(Method.java:507) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1219) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653) 01-22 11:29:36.967: E/AndroidRuntime(6733): at com.app.utils.StorageHelper.writeObject(StorageHelper.java:46) 01-22 11:29:36.967: E/AndroidRuntime(6733): at com.app.home.NewsListView.processData(NewsListView.java:359) 01-22 11:29:36.967: E/AndroidRuntime(6733): at com.app.home.NewsListView.access$4(NewsListView.java:314) 01-22 11:29:36.967: E/AndroidRuntime(6733): at com.app.home.NewsListView$NewsByIDTask.onPostExecute(NewsListView.java:563) 01-22 11:29:36.967: E/AndroidRuntime(6733): at com.app.home.NewsListView$NewsByIDTask.onPostExecute(NewsListView.java:1) 01-22 11:29:36.967: E/AndroidRuntime(6733): at android.os.AsyncTask.finish(AsyncTask.java:417) 01-22 11:29:36.967: E/AndroidRuntime(6733): at android.os.AsyncTask.access$300(AsyncTask.java:127) 01-22 11:29:36.967: E/AndroidRuntime(6733): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 01-22 11:29:36.967: E/AndroidRuntime(6733): at android.os.Handler.dispatchMessage(Handler.java:99) 01-22 11:29:36.967: E/AndroidRuntime(6733): at android.os.Looper.loop(Looper.java:130) 01-22 11:29:36.967: E/AndroidRuntime(6733): at android.app.ActivityThread.main(ActivityThread.java:3701) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.lang.reflect.Method.invokeNative(Native Method) 01-22 11:29:36.967: E/AndroidRuntime(6733): at java.lang.reflect.Method.invoke(Method.java:507) 01-22 11:29:36.967: E/AndroidRuntime(6733): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteI
- Conversión de mapa de bits Java a matriz de bytes
- Excepción Cast de clase al pasar una matriz de Serializables de una actividad a otra
- Cómo serializar para la clase android.location?
- Android: cómo almacenar persistentemente un Spanned?
- ¿Por qué un Comparator debería implementar Serializable?
- Android cómo guardar un mapa de bits - código de buggy
- Escribir objeto en el almacenamiento interno en android (Dentro del nuevo directorio)
Esto se informó como un error, puede ver una breve descripción aquí .
Codificación feliz … :).
Algunos googling básicos en stackoverflow me da esto:
Problema serializando DecimalFormatSymbols en 2.3.4
donde las respuestas aceptadas explican que los números decimalFormat
tienen que ser final
para ser serializable.