Question

I want to use file system to store and retrieve the data. My code is working fine in latest version like android 4.1 and 4.4. But it doesn't work and it give error in android 2.3. I write the object from other class and object is Arraylist and also read the object from the same class. Please help me. Thanks in advance.

My class is given below.

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
Was it helpful?

Solution

This was reported as a bug, you can see brief description here.

Happy Coding...:).

OTHER TIPS

Some basic googling on stackoverflow gives me this :

Problem serializing DecimalFormatSymbols in 2.3.4

where the accepted answers explains that decimalFormat numbers have to be final to be serializable.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top