2011-02-02 3 views
1

J'ai un objet qui a trois roussir champs: deux cordes et un DrawableProblème sérialisation Drawable

public class MyObject implements Serializable { 

    private static final long serialVersionUID = 1L; 
    public String name; 
    public String lastName; 
    public Drawable photo; 

    public MyObject() { 
    } 

    public MyObject(String name, String lastName, Drawable photo) { 

     this.name = name; 
     this.lastName = lastName; 
     this.photo = photo; 
    } 
} 

Ce que je suis en train de faire, est d'enregistrer une ArrayList de ces objets dans un fichier, mais je continue à obtenir un NotSerializableException

02-02 23:06:10.825: WARN/System.err(13891): java.io.NotSerializableException: android.graphics.drawable.BitmapDrawable 

le code que j'utilise pour stocker le fichier:

public static void saveArrayList(ArrayList<MyObject> arrayList, Context context) { 

    final File file = new File(context.getCacheDir(), FILE_NAME); 
    FileOutputStream outputStream = null; 
    ObjectOutputStream objectOutputStream = null; 

    try { 
     outputStream = new FileOutputStream(file); 
     objectOutputStream = new ObjectOutputStream(outputStream); 

     objectOutputStream.writeObject(arrayList); 
    } 

    catch(Exception e) { 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      if(objectOutputStream != null) { 
       objectOutputStream.close(); 
      } 
      if(outputStream != null) { 
       outputStream.close(); 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Tout fonctionne correctement lorsque le dessinable n'est pas initialisé. Merci d'avance pour toute aide.

Répondre

2
java.io.NotSerializableException: android.graphics.drawable.BitmapDrawable 

Ce message semble assez clair - l'instance drawable spécifique dans le domaine photo est un BitmapDrawable, qui n'a pas été conçu pour être sérialisé. Votre classe ne peut pas être sérialisée sans traiter le champ non sérialisable.

Si vous pouvez vous assurer que votre classe aura toujours un BitmapDrawable ou un Bitmap, vous pouvez voir ce code pour un exemple de la façon de traiter un champ Bitmap:

android how to save a bitmap - buggy code

+0

Merci pour la réponse! C'est la solution que je cherchais. – srgtuszy

2

Vous ne pouvez pas sérialiser que . En d'autres termes, si BitmapDrawable n'est pas sérialisable, vous ne pouvez pas le sérialiser. Habituellement, des choses comme celles-ci ne sont pas sérialisables parce qu'elles tiennent à des références à des choses qui ne sont pas de simples données. Comme un contexte ou un handle à une surface de dessin.