2015-12-18 1 views
2

Je développe une interface de message entre les services qui appartiennent à différents apk Android.Android - Passage sérialisable ou parcelable en bundle entre les services sur différents apk

Le service d'expéditeur peut envoyer un message, implémenté en tant que Bundle, au service récepteur. Les types primitifs comme String ou boolean sont correctement échangés.

L'étape suivante consiste à échanger des objets plus complexes, définis dans une bibliothèque, partagés entre les différents services. Ces objets implémentent l'interface Parcelable ou l'interface Serializable, afin qu'ils puissent être encapsulés dans un Bundle, en utilisant les méthodes putParcelable et putSerializable.

Malheureusement, cette solution ne fonctionne pas. Dans l'objet bundle reçu par le service, l'objet parcelable (ou sérialisable) est remplacé par un String. Il semble que Android appelle la méthode toString de l'objet avant d'envoyer le Bundle au service récepteur.

Existe-t-il une solution à ce problème sans implémenter des méthodes permettant de sérialiser chaque objet sur un Bundle formé uniquement de types primitifs?

+0

Qu'est-ce qui se passe lorsque vous appelez 'getParcelable()' du Bundle? Avez-vous obtenir null? – NoChinDeluxe

+0

il y a quelque chose qui ne va pas dans votre code: vous pouvez facilement passer n'importe quel 'Parcelable' dans les transactions Binder – pskink

+0

@NoChinDeluxe quand j'appelle' getParcelable() 'effectuer un cast au type attendu, une exception de cast de classe est levée parce que l'élément dans le 'Bundle' est considéré comme un objet' String'. – LucaRoverelli

Répondre

0

Vous pouvez toujours échanger des objets Ed Base64 en tant que chaînes, et les chaînes peuvent être faites à partir de ByteArray s afin que vous puissiez essayer une idée.

Vous pouvez passer en fait beaucoup de choses par des chaînes quand on y pense :)

+0

Vous avez raison. Pour l'instant, je sérialise l'objet en JSON afin qu'il puisse être passé en String, mais je cherche une meilleure solution, si c'est possible. – LucaRoverelli