2 votes

Problème de sérialisation Drawable

J'ai un seul objet qui a trois champs : deux chaînes de caractères et un 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 j'essaie de faire, c'est de sauvegarder un ArrayList de ces objets dans un fichier, mais je continue de recevoir une NotSerializableException

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

Le code que j'utilise pour enregistrer le fichier :

public static void saveArrayList(ArrayList 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 bien lorsque le Drawable n'est pas initialisé. Merci d'avance pour toute aide.

2voto

Bert F Points 27237
java.io.NotSerializableException: android.graphics.drawable.BitmapDrawable

Ce message semble assez clair - l'instance spécifique du drawable dans le champ 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 garantir que votre classe aura toujours un BitmapDrawable ou un Bitmap, vous pouvez consulter ce code pour un exemple de gestion d'un champ Bitmap:

android how to save a bitmap - buggy code

2voto

rfeak Points 5488

Vous ne pouvez pas sérialiser cela.

En gros, si BitmapDrawable n'est pas sérialisable, alors vous ne pouvez pas le sérialiser. Habituellement, des choses comme celles-ci ne sont pas sérialisables car elles conservent des références à des éléments qui ne sont pas des données pures. Comme un contexte ou une poignée d'une surface de dessin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X