studio programacion móviles libro desarrollo curso cluster aplicaciones android firebase bundle firebase-cloud-messaging

programacion - Convertir mapa a paquete en android



manual de programacion android pdf (4)

¿Existe una manera fácil de convertir un mapa a un paquete en Android sin iteración explícita?

¿Por qué?

Firebase devuelve un mapa para la notificación getData() . Necesito pasar los datos a un intento. Anteriormente, GCM me dio un paquete, así que no tenía que preocuparme por esto.


Creo que un buen bucle for old es la manera más fácil:

Bundle bundle = new Bundle(); for (Map.Entry<String, String> entry : getData().entrySet()) { bundle.putString(entry.getKey(), entry.getValue()); }


Puede usar writeToParcel(Parcel out, int flags) para generar un Parcel que podría ser igualmente útil, ya que es una clase principal de Bundle , y se integra fácilmente en el marco de Firebase como parte de la clase RemoteMessage . La documentación está here .


Se encontró con este mismo problema con los mensajes de Firebase y creó una función de extensión de kotlin para él. La esencia está aquí , código debajo. Aunque estoy usando este método, hay algunas advertencias:

  • no cubre todos los tipos que se pueden poner en un paquete
  • todavía está en desarrollo y no ha sido completamente probado

Con esto en mente, utilícelo como una guía, no como una solución definitiva. Mantendré actualizada la esencia a medida que evoluciona.

import android.os.Bundle import android.os.IBinder import android.os.Parcelable import java.io.Serializable fun <V> Map<String, V>.toBundle(bundle: Bundle = Bundle()): Bundle = bundle.apply { forEach { val k = it.key val v = it.value when (v) { is IBinder -> putBinder(k, v) is Bundle -> putBundle(k, v) is Byte -> putByte(k, v) is ByteArray -> putByteArray(k, v) is Char -> putChar(k, v) is CharArray -> putCharArray(k, v) is CharSequence -> putCharSequence(k, v) is Float -> putFloat(k, v) is FloatArray -> putFloatArray(k, v) is Parcelable -> putParcelable(k, v) is Serializable -> putSerializable(k, v) is Short -> putShort(k, v) is ShortArray -> putShortArray(k, v) // is Size -> putSize(k, v) //api 21 // is SizeF -> putSizeF(k, v) //api 21 else -> throw IllegalArgumentException("$v is of a type that is not currently supported") // is Array<*> -> TODO() // is List<*> -> TODO() } } }


private ArrayList<Bundle> convertMapToBundleList(ArrayList<HashMap<String, String>> mapList)