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();
}
我认为这些变化并不重要。我能够序列化该类。