Android serializable problème
J'ai créé une classe, qui a plusieurs variables membres, qui sont tous des serializable... à l'exception d'un Bitmap! J'ai essayé d'étendre bitmap et sérialisable, ne pas penser Bitmap est une classe finale.
Je veux sauver la classe (en gros la forme de l'état actuel d'un jeu) donc un joueur peut choisir et charger le jeu.
La façon dont je vois ça, j'ai deux options:
1) Trouver un autre moyen d'économiser de l'état de la partie. Toute aide serait appréciée.
2) changement de l'image bitmap membre de la variable de type int, dire, et de créer un BitmapGetter classe possède une méthode statique de retour bitmaps basé sur ints. (Cette option n'est pas facile, car ma classe contient de nombreuses bitmap possibilités et la façon dont j'ai créé le jeu c'est cela nécessitera une quantité incroyable d'effort.
Fondamentalement, je n'ai personne à blâmer, mais moi-même pour paresseusement la création d'un bitmap variable sans y penser, mais j'apprécierais toute aide...
OriginalL'auteur JXXH | 2011-05-14
Vous devez vous connecter pour publier un commentaire.
Comment sur le remplacement d'image avec une classe comme ceci:
Remplacés Serializable.writeObject() et readObject() les méthodes de sérialiser les octets au lieu de l'image de sorte que la classe est sérialisable. Vous aurez besoin pour terminer le constructeur parce que je ne sais pas comment vous actuellement construire votre image Bitmap. La dernière chose à faire est de remplacer les références à YourClass.bitmap avec YourClass.serialBitmap.bitmap.
Bonne chance!
Barry
P. S. Ce code compile mais je n'ai pas testé avec un réel bitmap
OriginalL'auteur Barry Fruitman
J'ai eu le même problème.
Et j'ai décidé comme ça.
Bitmap
estParcelable
, j'ai donc fait suite à ma classe.J'ai fait Constructeur qui obtient
Bundle
objet , et getter queretourne Bundle représentant des Objets de données. Ainsi, alors que Bitmap est
parcelable , Bundle pouvez enregistrer bitmap comme parcelable.
Lorsque vous devez passer Date dans l'intention , vous pouvez appeler des objets
getBundle()
méthode et de passer avecIntent.putExtra(String key,Bundle value)
Dans la cible de l'activité, vous appelez
getBundle(String key)
et de le transmettrepour constructeur.
Je pense qu'il est très facile d'approche.
OriginalL'auteur Ioane Sharvadze
Ici est un général bitmap wrapper: (Edit de Barry Fruitman réponse)
si vous souhaitez compresser les images bitmap et à faire la série d'objets plus petits
vous pouvez définir la compression via
setCompressFormat
etsetCompressQuality
.Exemple:
Si vous utilisez Progourd, ajouter les règles suivantes:
OriginalL'auteur Gil SH
Tout d'abord, vous devez sérialiser via Parcelable. C'est un Androïde de classe et en général ça fonctionne très bien, hors de la boîte: et vous pouvez sérialiser un objet ByteArray avec elle, avec les méthodes:
et
Vous pourriez vouloir vérifier Colis documentation trop.
OriginalL'auteur ferostar
Vous pouvez faire de la sérialisation à la main suivant les méthodes de java:
Sérialiser l'image en utilisant getPixels et quand vous faites de la désérialisation vous pouvez utiliser createBitmap de le recréer à partir de zéro.
Vous pouvez lire à ce sujet sur la façon d'utiliser les méthodes readObject et writeObject ici: http://download.oracle.com/javase/6/docs/api/java/io/Serializable.html
OriginalL'auteur jontro
Si c'est OK pour enregistrer les données de l'image séparément dans votre application, vous pouvez effectuer les opérations suivantes:
Dans votre classe qui enregistre l'état actuel, enregistrer l'image dans un dossier de votre choix:
Dans la classe qui a le bitmap en tant que membre, le chemin que l'serializable membre et de reconstruire l'image bitmap après la désérialisation:
Vous pouvez mettre en œuvre toute autre accumulation de fonctionnalité dans le
readObject()
fonction si nécessaire, car l'objet est entièrement construit après ladefaultReadObject()
appel.Espère que cette aide.
BTW, http://developer.android.com/reference/android/os/Parcel.html déconseille de les utiliser
Parcelable
pour la sérialisation des fins. Je n'ai pas assez de points encore à laisser un commentaire, si je suis l'édition de ma propre réponse à la mettre dans cette remarque.OriginalL'auteur alokoko