有没有一种简单的方法可以在没有显式迭代的情况下将Map转换为android中的Bundle?
为什么?
Firebase返回通知getData()
的映射。我需要把数据传递给一个意图。以前GCM给了我一个包,所以我不需要担心这个。
发布于 2017-01-07 13:58:23
在firebase消息传递中遇到了同样的问题,并为此创建了一个kotlin扩展函数。吉斯特来了,下面的代码。尽管我正在使用这种方法,但还是有一些注意事项:
考虑到这一点,请使用它作为指南,而不是一个明确的解决方案。随着它的发展,我会保持最新的要旨。
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()
}
}
}
https://stackoverflow.com/questions/37469241
复制相似问题