【问题标题】:Java RuntimeException for serializable object with Serializable and Custom Interface具有可序列化和自定义接口的可序列化对象的 Java RuntimeException
【发布时间】:2013-06-19 21:59:55
【问题描述】:

我遇到以下问题:

假设我有一个像这样的RiceContainerClass

public class RiceContainerClass implements Serializable{
 private typeOfRice
 private countryOfOrigin

 ...

我可以扩展这个类,(也许我想要一些SteamedRiceClass),但最重要的是我能够在Activities 之间通过我当前的实现来传递这个类。

当我决定我的 Rice 类可能需要带有 Sauceable 接口时,问题就出现了。

界面是我写的:

public interface Sauceable{

  public void setTypeOfSauce(Sauce sc)

  public Sauce getRiceSauce()
}

(在我的程序中,Sauce 实际上是Drawable

当我修改我的RiceContainerClass 以实现Sauce 接口时:

public class RiceContainerClass implements Serializable, Sauceable

我在运行时从 logcat 收到以下错误:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.app.RiceContainerClass)

有什么建议吗?我尝试让Sauce 类扩展Serializable,我认为这可能无济于事。

【问题讨论】:

    标签: java android serialization android-intent android-activity


    【解决方案1】:

    这意味着app.RiceContainerClass 不是Serializable

    只要确保这个类实现了Serializable 接口并定义了写入和读取对象的方法。

    您可以查看一些示例here

    【讨论】:

    • 诚然,我想我很懒不想使用 Parcelable,因为必须将额外的代码添加到实现类中。感谢您提供示例的链接,我会试一试并让您知道。我觉得奇怪的是,我一开始是在实现 Serializable,然后一旦我添加了额外的 Sauecable 接口,它就告诉我它不是可序列化的。
    • 嘿,所以我整合了你的建议。并没有我想象的那么糟糕。然而,在做一些进一步的研究时,我发现 Drawable 不是 Serializable/Parcelable,所以这就是我在实现 Sauceable 类时遇到异常的原因。有一种方法可以通过将 Drawable 转换为通用对象并将其转换回 Drawable 来传递。这里有 2 个例子:pastebin.com/NkUmpRm9 & stackoverflow.com/questions/4207120/…。感谢您的帮助!
    • 感谢您分享此信息,很高兴能提供帮助。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多