Android Studio keeps throwing the following error log
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)`
The WatCardData Class is as follows
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;
}
}
}
My Object Write Code is as follows
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();
}
Why am I unable to write the myData object to a file? I've tried making all Variables transient, but that doesn't work either!
I did not have all your packages, so I simplified the constructor to initialize each instance variable with a constant value.
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;
}
I did not have balanceScreen, so I just created a FileOutputStream and used the rest of your code. I did not know the class for myData, so I assumed it was 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();
}
I do not think these changes are significant. I was able to serialize the class.