- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Activity
,其中有一个私有(private)类数据。在 onSaveInstanceState
方法中,我尝试将此保存为 Data
的一个实例。这是我的整个 Activity :
public class TestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onSaveInstanceState(Bundle outState){
outState.putSerializable("TEST", new Data());
}
private class Data implements Serializable {
private static final long serialVersionUID = -4312723541994925110L;
}
}
现在,当我更改设备的方向时,Data
对象会按应有的方式保存和读取。但是,当我按下主页按钮时,应用程序崩溃并在 logcat 中显示以下内容:
05-10 20:05:51.895: E/AndroidRuntime(30317): FATAL EXCEPTION: main 05-10 20:05:51.895: E/AndroidRuntime(30317): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.rigidbits.test.TestActivity$Data) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.os.Parcel.writeSerializable(Parcel.java:1176) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.os.Parcel.writeValue(Parcel.java:1130) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.os.Parcel.writeMapInternal(Parcel.java:488) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.os.Bundle.writeToParcel(Bundle.java:1552) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.os.Parcel.writeBundle(Parcel.java:502) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.app.ActivityManagerProxy.activityPaused(ActivityManagerNative.java:1615) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2298) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.app.ActivityThread.access$1700(ActivityThread.java:117) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:938) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.os.Handler.dispatchMessage(Handler.java:99) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.os.Looper.loop(Looper.java:130) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.app.ActivityThread.main(ActivityThread.java:3683) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.lang.reflect.Method.invokeNative(Native Method) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.lang.reflect.Method.invoke(Method.java:507) 05-10 20:05:51.895: E/AndroidRuntime(30317): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 05-10 20:05:51.895: E/AndroidRuntime(30317): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 05-10 20:05:51.895: E/AndroidRuntime(30317): at dalvik.system.NativeStart.main(Native Method) 05-10 20:05:51.895: E/AndroidRuntime(30317): Caused by: java.io.NotSerializableException: com.rigidbits.test.TestActivity 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1535) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1143) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1241) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689) 05-10 20:05:51.895: E/AndroidRuntime(30317): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653) 05-10 20:05:51.895: E/AndroidRuntime(30317): at android.os.Parcel.writeSerializable(Parcel.java:1171) 05-10 20:05:51.895: E/AndroidRuntime(30317): ... 16 more
当我在 onSaveInstanceState
方法中注释该行时,Data
对象未保存,应用程序正确消失。
有什么帮助吗?
最佳答案
好的,我认为问题在于您使用的是私有(private)内部类。
因此它可以访问您的外部类的方法和字段,即您的 Activity 。
因为您的 Activity 不可序列化(因此不应该),您得到了异常。
An instance of InnerClass can exist only within an instance of OuterClass and has direct access to the methods and fields of its enclosing instance.
有两种解决方案。
让你的内部类静态化
将您的内部类移动为它自己的类并将其声明为公共(public)类
这些解决方案都使您的 Data
类成为一个独立的类,然后它不需要您的 Activity 实例存在
引用:http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
关于android - 按主页按钮时出现 NotSerializableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536019/
class NotSerializable {} class MyClass implements Serializable { private NotSerializable field; /
尝试序列化 Lot 对象并将其发送到套接字。获取错误: java.io.NotSerializableException: com.server.ClientServiceThread 为什么? pu
我们在集群 QA 环境中遇到以下错误。我们在 linux 上运行 Weblogic 10.3.3.0。 #### > 0) { message.append(", Name "); }
在我的最后一个问题没有得到答案后,我将这件事重新表述为最简单的形式。 1 个按钮、1 个点击监听器、1 个可序列化对象和 1 个用于输出可序列化对象的子例程。此代码基于我在 stackoverflow
我正在尝试通过套接字连接发送定制对象。该类实现了可序列化,但当我尝试将对象写入套接字时,构造函数仍然抛出 NotSerializableException。我将在下面发布相关代码: public cl
基本上,我编写了一个在屏幕上绘制形状并将每个形状保存到 ArrayList 中的程序。我想做的是弄清楚如何将 ArrayList 保存到一个文件中,以便我可以稍后调用它并编辑已经存在的形状。 所以我一
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.lang.reflect.
一段时间以来,我一直在尝试用序列化解决我的问题,不幸的是我迷路了。如果有人可以帮助我找到问题,我将不胜感激。我已经在每个类中实现了 Serializable。 已解决:问题是,一个类实现了 Seria
我正在尝试使用对象输出流将我制作的对象写入文件,每当我运行代码时,它都会抛出 NotSerializableException。如果您看到我做错了什么,请告诉我。 保存方法: public stati
我已经使用 OpenSSO 提供的 SAML 库实现了一个安全模块,但是我的服务器没有正确关闭并出现异常: java.io.NotSerializableException: com.sun.iden
我在社交网站上工作,我正在使用 JSF 2.2我有一些带有 View 范围的bean,在这些bean服务中注入(inject)了。 我有时在 tomcat 中遇到著名的 NotSerializable
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException 为什么在启动我的服务器 Tomcat
我有一个 Activity,其中有一个私有(private)类数据。在 onSaveInstanceState 方法中,我尝试将此保存为 Data 的一个实例。这是我的整个 Activity : pu
我的两个类也设计为创建一个 StudentData 对象数组(姓名、出生日期和 ID),其中包括一个 toString 覆盖以打印出所有变量。然后序列化数组并将其保存到名为 studentdata.t
这是我的小类: import java.io.Serializable; public abstract class SerializableCallback extends Callback imp
在我的 Spark 代码中,我试图从一个 csv 文件创建一个 IndexedRowMatrix。但是,我收到以下错误: Exception in thread "main" org.apache.s
我编写了一个 GUI,它使用 RMI 与服务器应用程序连接。因为 GUI 必须向在线用户显示一个线程刷新包含“在线用户列表”的 JLabel。有时我在运行时遇到这个异常: Caused by: jav
我有一个过滤项目的界面: public interface KeyValFilter extends Serializable { public static final long seria
我正在处理 jenkinsfile 并且在第三阶段遇到异常: an exception which occurred: in field com.cloudbees.groovy.cps.impl.B
我在 JSF 2 中使用 spring 3 我用 spring bean 替换了 JSF 管理的 bean,方法是在 bean 之上添加: @Component("mybean") @Scope("s
我是一名优秀的程序员,十分优秀!