2010-07-30 15 views
6

Las intenciones en Android son una forma elegante de pasar mensajes entre componentes desacoplados, pero ¿qué sucede si desea enviar datos adicionales con Intent? Sé que puede agregar varios tipos de valores y objetos que implementan Parcelable, como extras, pero esto realmente no satisface el envío local de tipos definidos por el usuario (es decir, no a través de una interfaz remota). ¿Algunas ideas?¿Cómo enviar objetos de datos personalizados con Intents en Android?

Respuesta

0

Cuando dices localmente, ¿eso significa enviar los tipos definidos por el usuario a través de las Actividades/Servicios locales que pertenecen a la misma APK? Siempre que el tipo definido por el usuario sea parcelable, puede enviarse como extras en la intención y puede procesarse en onStartCommand() de servicio/actividad.

+0

localmente como en el no a través de AIDL, y todos en el mismo proceso, la misma aplicación. La cuestión es que la implementación parcelable para tipos de datos personalizados complejos en realidad puede ser bastante dolorosa, cuando todo lo que necesito hacer es transferir un objeto con un intento ... – MalcomTucker

1

Si desea pasar objetos dentro de un solo proceso puede implementar su propia Application para mantener el estado global:

Clase base para aquellos que necesitan mantener el estado de aplicación global. Usted puede proporcionar su propia implementación de especificando su nombre en su etiqueta de AndroidManifest.xml , lo que hará que la clase sea instanciado para que cuando el proceso para su aplicación/paquete es creado.

+0

¿está bien, así que use la aplicación como un tipo de intermediario/almacenamiento para datos compartidos? – MalcomTucker

+0

exactamente, puede implementarlo como un repositorio si lo necesita –

4

en su tipo, se puede implementar la interfaz Serializable y llame al método Intent.putExtra(String, Serializable) incluirlo en el intento. Consideré hacerlo por un problema similar, pero optó por simplemente poner los datos en un paquete porque mi tipo solo tenía dos campos y no valía la pena el esfuerzo.

Ésta es la forma en que podría funcionar, suponiendo que haya implementado en Serializable Foo:

Foo test = new Foo(); 
test.Name = "name"; 
test.Value = "value"; 

Intent intent = new Intent(); 
intent.putExtra("test", test); 
Cuestiones relacionadas