【发布时间】:2012-05-24 04:42:07
【问题描述】:
例外:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = MyClass$2)
(简化的)代码:
i.putExtra("myparam", generateA(context, "foo"));
...
private A generateA(final Context context, String foo) {
return new A() {
@Override
public void test() {
System.out.println("test");
}
};
}
界面:
public interface A extends Serializable {
public void test();
}
我做错了什么?我传递的是可序列化的。
【问题讨论】:
-
还有更多代码可以提供给我们吗...我看不到所提供的任何问题,或者发布堆栈跟踪
-
哦,好吧...我再次查看堆栈跟踪,原因是外部类不可序列化!所以我让它实现了可序列化。但是它有一个类 Handler 的实例变量,它是不可序列化的,现在它因此失败了。
-
请改用
Parcelable,因为它与Intent附加功能一起使用要快得多。就个人而言,我永远不会梦想使用带有Parcelable或Serializable的匿名内部类。 -
我这样做是因为我想将行为传递给我的活动,以便执行。所以我做了一个接口并将它的子类传递给活动来执行某个方法。由于我只需要这些子类一次,对于非常具体的事情,我决定使用匿名。这种方法到底有什么问题?我怎样才能做得更好?
-
更多细节:我的活动是一个“通用”活动,它只在后台执行某些操作时显示加载屏幕。这个要在后台执行的任务是我想要通过的。我可以考虑的另一个解决方案是传递某种标识符并使用类似开关盒的东西在活动中实例化相应的类。但是传递接口的实现会更优雅,因为这样我的活动就不必知道我正在传递的细节。
标签: java android serializable anonymous-class