È venuto attraverso questo stesso problema con la messaggistica di Firebase e creato per esso una funzione di estensione kotlin. gist is here, codice di seguito. Anche se io sto usando questo metodo ci sono alcune avvertenze:
- non copre tutti i tipi che possono essere messi in un fascio
- è ancora in fase di sviluppo e non è stato completamente testato
Con questo in mente, si prega di utilizzare come guida non una soluzione definitiva. Terrò il succo aggiornato man mano che si evolve.
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()
}
}
}
"C'è un modo semplice per convertire una mappa in un pacchetto in Android senza iterazione esplicita?" - nota che una 'Mappa' non equivale necessariamente a un' Bundle'. Una 'Mappa' può avere chiavi che non sono stringhe. Una 'Mappa' può avere valori che non sono uno dei tipi di dati supportati. – CommonsWare
Sì, ma nel mio caso sono tutti primitivi e String –
È possibile serializzarlo. – cyroxis