4

J'essaie donc de transmettre une instance d'une classe que je crée par intention à une nouvelle activité.Exception non sérialisable sur la classe personnalisée - Android

public class Room implements Serializable{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 6857044522819206055L; 


    int roomID; 

    String roomName; 

    ArrayList<MarkerHolder> markerHolders = new ArrayList<MarkerHolder>(); 


    public int getRoomID() { 
     return roomID; 
    } 
    public void setRoomID(int roomID) { 
     this.roomID = roomID; 
    } 

    public String getRoomName() { 
     return roomName; 
    } 
    public void setRoomName(String roomName) { 
     this.roomName = roomName; 
    }  

    public ArrayList<MarkerHolder> getMarkerHolders() { 
     return markerHolders; 
    } 
    public void setMarkerHolders(ArrayList<MarkerHolder> markerHolders) { 
     this.markerHolders = markerHolders; 
    }  
} 

public class MarkerHolder implements Serializable{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = -7334724625702415322L; 
    String marker; 
    String markerTag; 
    public String getMarker() { 
     return marker; 
    } 
    public void setMarker(String marker) { 
     this.marker = marker; 
    } 
    public String getMarkerTag() { 
     return markerTag; 
    } 
    public void setMarkerTag(String markerTag) { 
     this.markerTag = markerTag; 
    } 
} 

Et j'essaie de passer par cette classe

Intent svc = new Intent(this, RoomUploader.class); 
svc.putExtra("room", room); 

try{   
    startService(svc); 
}catch (Exception e){ 
    e.printStackTrace(); 
} 

et je continue à obtenir une exception non Serializable que je ne peux pas comprendre. Les deux classes implémentent serializable et ont des identifiants de série. Les variables membres sont juste des chaînes, ints, et un tableau d'une autre classe qui est aussi sérialisable et ne contient que des chaînes. Autant que je sache, toutes ces choses devraient être sérialisables, quoi d'autre pourrait causer cette erreur? Merci d'avance.

+0

Veuillez ajouter la tracktrace. Et ArrayList est sérialisable. –

Répondre

9

Est-ce que ces classes classes internes de votre activité ou d'une autre classe? Si c'est le cas, ils ont une référence à leur classe externe (qui peut être ou non sérialisable), et vous pouvez résoudre ce problème en créant ces classes static.

Exemple:

public static class Room implements Serializable 
{ 
    //your implementation 
} 

public static class MarkerHolder implements Serializable 
{ 
    //your implementation 
} 
+0

ces classes sont les deux classes internes de la classe qui crée l'intention – pat

+0

Marquez ces deux classes comme 'static', comme dans l'exemple ci-dessus. – wsanville

+2

@pat ou déplacez les classes dans leurs propres fichiers java! – Blundell

0

Essayez de changer ArrayList à un tableau natif de MarkerHolder:

MarkerHolder[] markerHolders; 

Mise à jour: Mon mauvais. J'ai toujours utilisé un tableau natif pour la sérialisation donc je ne suis pas au courant que ArrayList est vraiment sériable.

Votre code semble bon. Quel était le message d'erreur exact imprimé dans le logcat (c'est-à-dire quelle classe a jeté l'exception de sérialisation)?

Une autre solution (plus de travail) consiste à faire en sorte que vos objets implémentent l'interface Parcable.

+1

En fait, 'ArrayList' * est * sérialisable: http://developer.android.com/reference/java/util/ArrayList.html – wsanville

+0

hmm oui, et j'ai besoin d'utiliser arrayList parce que je dois ajouter dynamiquement des éléments (vous pouvez ' t faire cela à Java dans le droit?) Tout ce qui pourrait être faux avec le code ci-dessus? – pat

0

Essayez d'utiliser getApplicationContext() ou contexte instaed de cela.

Questions connexes