2015-12-29 1 views
1

Android studio continue de lancer le journal des erreursNotSerializableException jeté pour la classe contenant des éléments de données primitives

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)` 

suivant la classe WatCardData est comme suit

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; 
     } 
    } 
} 

Mon objet écrire du code est la suivante

      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(); 
          } 

Pourquoi ne puis-je pas écrire l'objet myData dans un fichier? J'ai essayé de rendre toutes les variables transitoires, mais ça ne marche pas non plus!

+0

Est-ce que balancescreen est aussi une classe? Et peut-être * pas * déclaré sérialisable? – Jan

+0

Montrez-nous le code de l'écran d'équilibre. –

Répondre

0

Je n'avais pas tous vos packages, j'ai donc simplifié le constructeur pour initialiser chaque variable d'instance avec une valeur constante.

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; 
} 

Je n'ai pas balanceScreen, donc Je viens de créer un FileOutputStream et utilisé le reste de votre code. Je ne connaissais pas la classe pour myData, donc j'ai supposé que c'était 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(); 
    } 

Je ne pense pas que ces changements soient significatifs. J'ai été capable de sérialiser la classe.