Est venu à travers ce même problème avec firebase de messagerie et créé un kotlin extension de la fonction pour cela. L' essentiel est ici, le code ci-dessous. Bien que je suis en utilisant cette méthode il y a quelques mises en garde:
- elle ne couvre pas tous les types qui peuvent être mis dans un bundle
- il est encore en cours de développement et n'a pas été entièrement testé
Avec cela à l'esprit, merci de l'utiliser comme un guide pas à une solution définitive. Je vais garder l'essentiel à jour à mesure qu'il évolue.
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()
}
}
}