2014-01-22 2 views
4

Я хочу использовать файловую систему для хранения и извлечения данных. Мой код отлично работает в последней версии, такой как Android 4.1 и 4.4. Но он не работает, и он дает ошибку в Android 2.3. Я пишу объект из другого класса, а объект - Arraylist, а также читает объект из того же класса. Пожалуйста, помогите мне. Заранее спасибо.Android java.lang.IllegalArgumentException: no char field 'exponential' in android 2.3

Мой класс приведен ниже.

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; 
} 
} 

Ошибка

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 
+0

Это может помочь. http://stackoverflow.com/questions/5917899/problem-serializing-decimalformatsymbols-in-2-3-4 –

ответ

0

Об этом сообщается как об ошибке, вы можете увидеть краткое описание here.

Счастливое кодирование ... :).

0

Некоторые основные прибегая к помощи на StackOverflow дает мне это:

Problem serializing DecimalFormatSymbols in 2.3.4

где принятые ответы объясняет, что decimalFormat номера должны быть final быть сериализуемым ,

+0

вы можете объяснить более подробно? где следует поставить окончательный? –

+0

попытайтесь поместить свой метод writeObject() в качестве окончательного и протестировать, если он работает – HpTerm

+0

. Я вижу, что метод writeObject() является окончательным по умолчанию. Но все еще есть проблема. –

Смежные вопросы