Kam zu dem gleichen Problem mit Firebase Messaging und erstellt eine Kotlin-Erweiterung-Funktion für sie. Der gist is here, Code unten. Obwohl ich diese Methode dort bin mit ein paar Einschränkungen:
- es alle Typen nicht abdecken, die in ein Bündel gesetzt werden kann
- es ist noch in der Entwicklung und wurde nicht vollständig getestet
In diesem Sinne, bitte verwenden Sie es als Leitfaden nicht als endgültige Lösung. Ich werde das Wesentliche auf dem neuesten Stand halten, wie es sich entwickelt.
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()
}
}
}
"Gibt es eine einfache Möglichkeit, eine Map in ein Android-Paket ohne explizite Iteration zu konvertieren?" - Beachten Sie, dass eine 'Map' nicht unbedingt mit einem' Bundle' gleichzusetzen ist. Eine 'Map' kann Schlüssel haben, die keine Zeichenketten sind. Eine Map kann Werte enthalten, die nicht zu den unterstützten Datentypen gehören. – CommonsWare
Ja, aber in meinem Fall sind sie alle Primitiven und String –
Sie könnten es serialisieren. – cyroxis