El android.os.Message
usa un Bundle
para enviar con su método sendMessage. Por lo tanto, ¿es posible poner un HashMap
dentro de un Bundle
?Android HashMap en Bundle?
Respuesta
prueba como:
Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);
y en la segunda actividad
Bundle bundle = this.getIntent().getExtras();
if(bundle != null) {
hashMap = bundle.getSerializable("HashMap");
}
porque Hashmap por implementos defecto Serializable
lo que puede pasar que el uso de putSerializable
en paquete y entrar en otra actividad utilizando getSerializable
Recibo un error al tratar de serializar el mapa hash vinculado Parcel: no se puede ordenar el valor com .SGID.DataClass.InvalidSubscriptionReasonsData @ 41bd2b98 –
¿Cómo puedo acceder a este objeto serializable Hash_Map ??? –
@Rani: ¿aún tiene problemas o está resuelto? –
De acuerdo con doc, Hashmap
implementa Serializable
, por lo que puede putSerializable
supongo. Lo intentaste ?
Si desea enviar todas las llaves del paquete, puede intentar
for(String key: map.keySet()){
bundle.putStringExtra(key, map.get(key));
}
Tengo curiosidad si hay alguna razón para no hacer esto? No he utilizado mucho la serialización, y nunca agrupa (nuevo en android), así que tengo curiosidad si esto es O (n) y anexar a un paquete es efectivamente O (1) o no. Si no son diferentes en costo, no ve por qué te molestarías en serializarlo en otro mapa. –
Nota: Si está utilizando un AppCompatActivity, tendrá que llamar al método protected void onSaveInstanceState(Bundle outState) {}
(NOpublic void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {}
).
código Ejemplo ...
tienda el mapa:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("leftMaxima", leftMaxima);
outState.putSerializable("rightMaxima", rightMaxima);
}
y recibirlo en onCreate:
if (savedInstanceState != null) {
leftMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("leftMaxima");
rightMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("rightMaxima");
}
sentimos si se trata de algún tipo de respuesta duplicado - tal vez alguien lo encuentra útil. :)
public static Bundle mapToBundle(Map<String, Object> data) throws Exception {
Bundle bundle = new Bundle();
for (Map.Entry<String, Object> entry : data.entrySet()) {
if (entry.getValue() instanceof String)
bundle.putString(entry.getKey(), (String) entry.getValue());
else if (entry.getValue() instanceof Double) {
bundle.putDouble(entry.getKey(), ((Double) entry.getValue()));
} else if (entry.getValue() instanceof Integer) {
bundle.putInt(entry.getKey(), (Integer) entry.getValue());
} else if (entry.getValue() instanceof Float) {
bundle.putFloat(entry.getKey(), ((Float) entry.getValue()));
}
}
return bundle;
}
Estoy usando la implementación de mine kotlin de Parcelable para lograr eso y hasta ahora me funciona. Útil si quiere evitar el pesado serializable.
también con el fin de trabajar recomiendo usarlo con these
Declaración
class ParcelableMap<K,V>(val map: MutableMap<K,V>) : Parcelable {
constructor(parcel: Parcel) : this(parcel.readMap(LinkedHashMap<K,V>()))
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeMap(map)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<ParcelableMap<Any?,Any?>> {
@JvmStatic
override fun createFromParcel(parcel: Parcel): ParcelableMap<Any?,Any?> {
return ParcelableMap(parcel)
}
@JvmStatic
override fun newArray(size: Int): Array<ParcelableMap<Any?,Any?>?> {
return arrayOfNulls(size)
}
}
}
Uso
escritura
val map = LinkedHashMap<Int, String>()
val wrap = ParcelableMap<Int,String>(map)
Bundle().putParcelable("your_key", wrap)
leer
val bundle = fragment.arguments ?: Bundle()
val wrap = bundle.getParcelable<ParcelableMap<Int,String>>("your_key")
val map = wrap.map
No se olvide que si su mapa K,V
no están repartido por defecto que deben implementar Parcelable
- 1. Hashmap vs Bundle en Android Comparación de eficacia y rendimiento
- 2. Android: ¿cuál es la diferencia entre las colecciones de Bundle Vs java.util como HashMap
- 3. HashMap Problemas Deserialización en Android
- 4. ¿Es posible crear un HashMap que sea Parcelable en Android?
- 5. Serializando Android Bundle para almacenamiento en red y/o persistente?
- 6. Qué hay onCreate (Bundle savedInstanceState)
- 7. Asignación de Hashmap a Hashmap
- 8. Cómo ordenar HashMap como agregado en Android con ArrayAdapter
- 9. plist bundle version values
- 10. ¿Imprime OSGI bundle classpath?
- 11. Bundle install mess
- 12. Resource Bundle Spring
- 13. TextMate Haskell Bundle
- 14. BlackBerry: Localization, Resource Bundle
- 15. impresión HashMap En Java
- 16. Búsqueda parcial en HashMap
- 17. HashMap basado en disco
- 18. Doble en HashMap
- 19. ¿Cómo guardar HashMap en Preferencias compartidas?
- 20. Buscar un HashMap en un ArrayList de HashMap
- 21. Uso Bundle-NativeCode en Linux no funciona
- 22. Bundle framework con aplicación en XCode
- 23. Uso de JavaCompiler en un OSGi Bundle
- 24. HashMap perfiles
- 25. Ocultar configuración Bundle in Settings.app
- 26. rails bundle install producción solo
- 27. problema cron y bundle exec
- 28. HashMap Serializability
- 29. delphi hashmap?
- 30. Ruby bundle open, set $ EDITOR
Java y Android novato 8) thnx a todos! –
Acepte cualquier respuesta si hemos resuelto su problema. thx – AMerle
La solución está aquí: [Android - ¿Cómo pasar HashMap entre actividades?] (http://stackoverflow.com/a/11155142/379693) –