【问题标题】:Android java.lang.IllegalArgumentException: no char field 'exponential' in android 2.3Android java.lang.IllegalArgumentException:在 android 2.3 中没有字符字段“指数”
【发布时间】:2014-01-22 06:24:31
【问题描述】:

我想使用文件系统来存储和检索数据。我的代码在 android 4.1 和 4.4 等最新版本中运行良好。但它不起作用,并且在 android 2.3 中出现错误。我从其他类中写入对象,对象是 Arraylist,并且还从同一类中读取对象。请帮我。提前致谢。

我的班级如下。

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

【问题讨论】:

标签: android file serialization arraylist datastore


【解决方案1】:

这是作为错误报告的,您可以查看简要说明here

快乐编码...:)。

【讨论】:

    【解决方案2】:

    stackoverflow 上的一些基本谷歌搜索给了我这个:

    Problem serializing DecimalFormatSymbols in 2.3.4

    接受的答案说明 decimalFormat 数字必须是 final 才能序列化。

    【讨论】:

    • 你能详细解释一下吗?应该把final放在哪里?
    • 尝试将您的 writeObject() 方法作为最终方法并测试它是否有效
    • 我看到 writeObject() 方法默认是最终的。但仍然有问题。
    • 嗯,那很难说。
    猜你喜欢
    • 2017-01-11
    • 2023-04-03
    • 1970-01-01
    • 2016-11-04
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多