Я хочу использовать файловую систему для хранения и извлечения данных. Мой код отлично работает в последней версии, такой как 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
Это может помочь. http://stackoverflow.com/questions/5917899/problem-serializing-decimalformatsymbols-in-2-3-4 –