我目前正在开发一个 Android 应用程序,该应用程序会根据特定事件(例如电池电量)自动更改手机状态。我有一个 Profile 类,它有 3 个主要参数、名称、事件和状态(事件和状态是另外 2 个自定义类)
在我的 ProfileEdit 类中,有各种组件,例如 EditText 和 Spinner 供用户配置配置文件。我需要访问显示每个配置文件的 ListActivity 类中的 Profile 类型的 ArrayList,以及获取当前 ArrayList 并添加新配置文件或更新一个配置文件的 ProfileEdit 类。
我必须首先这样做的想法是使用 ObjectOutputStream 将我的 ArrayList 写入手机 sd 卡,然后任何需要它的类都可以检索它。然而,到目前为止,我这样做的尝试最终只是抛出了一个 IOException。我的代码如下:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/sdcard/profile.prof"));
oos.writeObject(profiles);
oos.flush();
oos.close();
profile 对象是我要写入文件的 ArrayList。我无法弄清楚为什么这会引发异常。我尝试通过调用 writeObject("Hello"); 将对象更改为字符串;并且不再抛出异常,所以我只能假设它是 ArrayList 的问题。我的印象是 ArrayList 类实现了可序列化,而我的 Profile 类也实现了可序列化,尽管它没有实现同样的功能。
或者,如果有更好的方法可以让我的 ProfileList (ListActivity) 和 ProfileEdit 类访问同一个 ArrayList,请告诉我。
编辑:这是 IO 异常堆栈跟踪:(ProfileEdit 类的第 114 行是 writeObject() 行)
EZSettings(14788): IO Exception
EZSettings(14788): java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1535)
EZSettings(14788): java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
EZSettings(14788): java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
EZSettings(14788): java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
EZSettings(14788): java.util.ArrayList.writeObject(ArrayList.java:651)
EZSettings(14788): java.lang.reflect.Method.invokeNative(Native Method)
EZSettings(14788): java.lang.reflect.Method.invoke(Method.java:507)
EZSettings(14788): java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1219)
EZSettings(14788): java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575)
EZSettings(14788): java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
EZSettings(14788): java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
EZSettings(14788): java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
EZSettings(14788): com.ezstatechanger.ProfileEdit.saveState(ProfileEdit.java:114)
EZSettings(14788): com.ezstatechanger.ProfileEdit.access$0(ProfileEdit.java:80)
EZSettings(14788): com.ezstatechanger.ProfileEdit$1.onClick(ProfileEdit.java:72)
EZSettings(14788): android.view.View.performClick(View.java:2538)
EZSettings(14788): android.view.View$PerformClick.run(View.java:9152)
EZSettings(14788): android.os.Handler.handleCallback(Handler.java:587)
EZSettings(14788): android.os.Handler.dispatchMessage(Handler.java:92)
EZSettings(14788): android.os.Looper.loop(Looper.java:123)
EZSettings(14788): android.app.ActivityThread.main(ActivityThread.java:3691)
EZSettings(14788): java.lang.reflect.Method.invokeNative(Native Method)
EZSettings(14788): java.lang.reflect.Method.invoke(Method.java:507)
EZSettings(14788): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
EZSettings(14788): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
EZSettings(14788): dalvik.system.NativeStart.main(Native Method)