【问题标题】:Android (JAVA) — object serialization errorAndroid (JAVA) — 对象序列化错误
【发布时间】:2014-07-22 14:29:17
【问题描述】:

当我尝试序列化对象时 - 应用程序崩溃并出现错误:

06-02 17:44:38.809  19898-19898/com.ibank.for_business E/serializeObject﹕ error
java.io.NotSerializableException: org.json.JSONObject
        at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
        at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
        etc...

可序列化对象:

public class HistoryItem implements Serializable {

    public static final int STATE_INCOMING = 1;
    public static final int STATE_OUTGOING = 0;
    public static final int STATE_UNKNOWN = -1;

    private String status;
    private String date = UDate.today(UDate.FORMAT_DMY);
    private String time;
    private String number;
    private String amount;
    private String description;
    private String incoming;
    private int isIncoming;
    private String account;
    private String name;

    public static HistoryItem fromJSON(final JSONObject json) {
        return new HistoryItem() {{
            setStatus(optString("status", json));
            setDate(optString("date", json));
            setTime(optString("time", json));
            setNumber(optString("number", json));
            setAmount(optString("amount", json));
            setDescription(optString("description", json));
            setIncoming(optString("incoming", json));
            setAccount(optString("account", json));
            setName(optString("name", json));
        }};
    }

    // ... Getters and setters

}

我知道应用程序发誓序列化 JSONObject 但据我所知,只有序列化的类字段。

离开JSON方法可以解决这个问题吗?

提前致谢!

【问题讨论】:

  • 错误可能会出现在您尝试获取此对象的位置...在那里您必须使用getSerializeble 获取此对象,就像某种类型的方法请检查。
  • 您是否使用了Parselable,如果没有,请尝试一次。

标签: java android serialization


【解决方案1】:

在您的 fromJSON 方法中,您使用的是双括号初始化模式:{{ ... }}。您实际上正在做的是使用实例初始化程序块创建HistoryItem 的匿名子类。

匿名子类对fromJSON 方法的参数有一个不可见的隐式引用。当你尝试序列化这个对象时,你会得到一个NotSerializableException,因为不可见引用引用的对象JSONObject是不可序列化的。

删除双括号初始化模式的使用,只创建HistoryItem 的常规实例而不是匿名子类:

public static HistoryItem fromJSON(final JSONObject json) {
    HistoryItem item = new HistoryItem();

    item.setStatus(optString("status", json));
    item.setDate(optString("date", json));
    item.setTime(optString("time", json));
    item.setNumber(optString("number", json));
    item.setAmount(optString("amount", json));
    item.setDescription(optString("description", json));
    item.setIncoming(optString("incoming", json));
    item.setAccount(optString("account", json));
    item.setName(optString("name", json));

    return item;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多