为包含基元数据成员的类引发notSerializableException



Android Studio不断抛出以下错误日志

12-29 16:13:39.092 9311-9311/com.cg.watbalance W/System.err: Caused by: java.io.NotSerializableException: com.cg.watbalance.balancescreen$WatCardData
12-29 16:13:39.092 9311-9311/com.cg.watbalance W/System.err:     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1344)
12-29 16:13:39.092 9311-9311/com.cg.watbalance W/System.err:     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
12-29 16:13:39.092 9311-9311/com.cg.watbalance W/System.err:     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
12-29 16:13:39.092 9311-9311/com.cg.watbalance W/System.err:     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)`

WatCardData类如下

public static class WatCardData implements java.io.Serializable{
    private String FirstName;
    private Double MP, FD, Other, Total;
    private Date Date;
    public WatCardData(Document myDoc) {
        Elements myTDTags = myDoc.getElementsByTag("TD");
        Element myNameTag = myDoc.getElementById("oneweb_account_name");
        String TempFirstName = myNameTag.text().split(",")[1];
        if (TempFirstName == null || TempFirstName.length() == 0) {
                FirstName = TempFirstName;
        }
        else {
            FirstName = WordUtils.capitalizeFully(TempFirstName.substring(0, TempFirstName.length()-1));
        }
        MP = Double.valueOf(myTDTags.get(7).text()) + Double.valueOf(myTDTags.get(14).text()) + Double.valueOf(myTDTags.get(21).text()) + Double.valueOf(myTDTags.get(49).text());
        FD = Double.valueOf(myTDTags.get(42).text()) + Double.valueOf(myTDTags.get(35).text()) + Double.valueOf(myTDTags.get(28).text());
        Other = Double.valueOf(myTDTags.get(56).text()) + Double.valueOf(myTDTags.get(63).text()) + Double.valueOf(myTDTags.get(70).text()) + Double.valueOf(myTDTags.get(77).text()) + Double.valueOf(myTDTags.get(84).text());
        Total = Double.valueOf(myTDTags.get(91).text().substring(2));
        Date = new Date();
    }
    private String getMPString() {
        return "$" + MP;
    }
    private String getFDString() {
        return "$" + FD;
    }
    private String getOtherString() {
        return "$" + Other;
    }
    private String getFirstName(){
        return FirstName+"'s WatCard";
    }
    private String getTotalString() {
        return "$" + Total;
    }
    private String getDateString() {
        String txt = DateUtils.getRelativeTimeSpanString(Date.getTime()).toString();
        if (txt.equals("0 minutes ago")) {
            return "Now";
        } else {
            return txt;
        }
    }
}

我的对象写入代码如下

                            try {
                                FileOutputStream fos = balancescreen.this.openFileOutput("lastBalance", Context.MODE_PRIVATE);
                                ObjectOutputStream os = new ObjectOutputStream(fos);
                                os.writeObject(myData);
                                Log.d("DATA","WRITTEN");
                                os.close();
                                fos.close();
                            } catch(Exception e) {
                                e.printStackTrace();
                            }

为什么我无法将myData对象写入文件?我试过让所有变量都是瞬态的,但这也不起作用!

我没有你所有的包,所以我简化了构造函数,用一个常数值初始化每个实例变量。

public WatCardData() {
    this.Date = new Date();
    this.FirstName = "Fred";
    this.MP = 12.3;
    this.FD = 12.3;
    this.Other = 12.3;
    this.Total = 12.3;
}

我没有balanceScreen,所以我只创建了一个FileOutputStream并使用了您的其余代码。我不知道myData的类,所以我认为它是WatCardData。

    WatCardData myData = new WatCardData();
    try {
        FileOutputStream fos = new FileOutputStream("lastBalance");
        ObjectOutputStream os = new ObjectOutputStream(fos);
        os.writeObject(myData);
        os.close();
        fos.close();
    } catch(Exception e) {
        e.printStackTrace();
    }

我认为这些变化并不重要。我能够序列化该类。

最新更新