2016-12-20 1 views
0

Le projet Android en question utilise déjà Serializable pour transmettre des informations entre les modules internes.Envoi d'objets parcelables comme sérialisables

Je travaille sur un de ces modules qui utilise également des bibliothèques externes pour calculer les itinéraires de navigation.

J'ai besoin de passer un de ces objets « externes » à un autre module, ce n'est pas Serializable donc je ne suis pas en mesure d'envoyer normalement. Le programmeur avant moi avait transformé tous les objets non sérialisables en variables statiques dans une classe Wrapper, je ne suis pas sûr que ce soit une bonne idée même si les modules doivent rester actifs tout le temps.

Ceci est la classe wrapper Serializable:

private static Road road; 
private NavigationStep firstNavigationStep; 

/** 
* To send the route information to the App. Here is everything the app needs to display the 
* data to the user. 
* @param road the route the user is to follow 
* @param firstNavigationStep the users location and the current Step. 
*/ 
public CurrentRoad(Road road, NavigationStep firstNavigationStep){ 
    this.firstNavigationStep = firstNavigationStep; 
    this.road  = road; 
} 

L'écriture de la route comme transitoire me fait perdre des données, en train d'écrire une classe wrapper tout pour la route serait trop de travail (il est nécessaire de construire des superpositions, de sorte qu'un beaucoup de géométrie est à l'intérieur et provient d'une bibliothèque externe, donc je peux oublier quelque chose). Changer le projet en entier pour Parcelable n'est pas non plus réaliste.

Y a-t-il une solution? Est-ce que la meilleure façon de vraiment sauver ce dont j'ai besoin est statique?

Répondre

0

Essayez d'utiliser EventBus. Envoyer un événement collant, contenant une référence d'objet. Il sera remis à chaque objet abonné jusqu'à ce que vous annuliez explicitement cet événement.

+0

Il existe déjà un service de messagerie décrit dans notre architecture, il utilise Serializable. C'est un MessageManger écrit par quelqu'un d'autre sur le projet. Je suis un peu nouveau dans l'équipe et le projet s'étend sur plus d'une entreprise donc ajouter une bibliothèque externe n'est pas si simple – Raeglan

0

Peut-être que vous pouvez utiliser un événement (http://greenrobot.org/eventbus/) pour passer l'objet à l'endroit où vous en avez besoin.

+0

Il existe déjà un service de messagerie décrit dans notre architecture, il utilise Serializable. C'est un MessageManger écrit par quelqu'un d'autre sur le projet. Je suis un peu nouveau dans l'équipe et le projet traverse plus d'une entreprise, donc ajouter une bibliothèque externe n'est pas si simple – Raeglan

+0

Ok, je ne suis pas sûr de comprendre les nuances de votre question, mais peut-être vous pouvez essayer de la stocker dans une instance singleton dans votre classe d'application (éventuellement étendue). En supposant que vous ayez toujours accès au contexte de l'application, cela vous permettra de stocker quelque chose qui devrait rester aussi longtemps que votre application. Alors peut-être une intention ou un autre signal pour déclencher que la valeur de cette classe singelton devrait être lue à la réception. – Julius