Convert Map to Bundle in android

匿名 (未验证) 提交于 2019-12-03 02:50:02

问题:

Is there an easy way to convert a Map to a Bundle in android without explicit iteration?

Why?

Firebase returns a Map for Notification getData(). I need to pass the data to an intent. Formerly GCM gave me a bundle, so I didn't need to worry about this.

回答1:

I guess a good old fashioned for loop is the easiest way:

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


回答2:

Came across this same issue with firebase messaging and created a kotlin extension function for it. The gist is here, code below. Although I am using this method there are some caveats:

  • it doesn't cover all of the types that can be put into a bundle
  • it is still under development and hasn't been fully tested

With this in mind, please use it as a guide not a definitive solution. I will keep the gist up to date as it evolves.

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()     }   } } 


回答3:

You can use writeToParcel(Parcel out, int flags)to generate a Parcel that could be similarly useful, since it's a parent class of Bundle, and it's handily built into the Firebase framework as part of the RemoteMessage class. Documentation is here.



回答4:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!