我目前正在开发一个Android应用程序,该应用程序根据某个事件(如电池电量)自动更改电话状态。我有一个配置文件类,它有3个主要参数,名称,事件和状态(事件和状态是2个其他自定义类)为什么ObjectOutputStream.writeObject()抛出IOException?
在我的ProfileEdit类中,有各种组件,如EditText和Spinner供用户配置Profile 。我需要访问ListActivity类中的Profile类型的ArrayList,它显示每个配置文件,以及我的ProfileEdit类,它获取当前的ArrayList并添加新的配置文件,或者更新一个。
我不得不这样做的想法是使用ObjectOutputStream将我的ArrayList写到手机SD卡上,然后它可以被需要它的任何类检索。然而,我到目前为止这样做的尝试最终抛出了IOException。我的代码如下:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/sdcard/profile.prof"));
oos.writeObject(profiles);
oos.flush();
oos.close();
配置文件对象是我的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)
“IOException”的消息是什么? – jprofitt
嗨jdprofit,我添加了堆栈跟踪到原来的问题,我希望它对你比对我更有用。谢谢。 –