android.os.Message
使用Bundle
發送它的sendMessage方法。因此,是否有可能將HashMap
放入Bundle
?Android HashMap in Bundle?
回答
嘗試爲:
Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);
,並在第二活動
Bundle bundle = this.getIntent().getExtras();
if(bundle != null) {
hashMap = bundle.getSerializable("HashMap");
}
因爲Hashmap默認工具Serializable
這樣你就可以使用putSerializable
捆綁傳遞和其他活動獲得使用getSerializable
我嘗試序列化鏈接的哈希映射時出現錯誤包裹:無法封送值com .SGID.DataClass.InvalidSubscriptionReasonsData @ 41bd2b98 – 2013-10-04 11:48:03
我該如何訪問這個可序列化的對象Hash_Map ??? – 2013-10-04 12:01:20
@Rani:仍然有問題或解決? – 2013-10-04 16:39:38
根據doc,Hashmap
implements Serializable
,所以你可以putSerializable
我猜。你試過了嗎?
如果你想發送捆綁中的所有密鑰,你可以嘗試
for(String key: map.keySet()){
bundle.putStringExtra(key, map.get(key));
}
我很好奇,如果有任何理由不這樣做?我沒有使用過多的序列化,也沒有捆綁(新的android),所以我很好奇,如果這是O(n)並且附加到一個捆綁包實際上是O(1)或不是。 如果他們在成本方面沒有差異,不會看到爲什麼要將它序列化到另一個地圖中。 – 2016-02-15 23:07:23
請注意:如果您使用的是AppCompatActivity,你將不得不調用 protected void onSaveInstanceState(Bundle outState) {}
(不public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {}
)方法。
示例代碼...
商店地圖:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("leftMaxima", leftMaxima);
outState.putSerializable("rightMaxima", rightMaxima);
}
而在的onCreate接受它:
if (savedInstanceState != null) {
leftMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("leftMaxima");
rightMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("rightMaxima");
}
很抱歉,如果它是某種重複的答案 - 也許有人會覺得很有用。 :)
public static Bundle mapToBundle(Map<String, Object> data) throws Exception {
Bundle bundle = new Bundle();
for (Map.Entry<String, Object> entry : data.entrySet()) {
if (entry.getValue() instanceof String)
bundle.putString(entry.getKey(), (String) entry.getValue());
else if (entry.getValue() instanceof Double) {
bundle.putDouble(entry.getKey(), ((Double) entry.getValue()));
} else if (entry.getValue() instanceof Integer) {
bundle.putInt(entry.getKey(), (Integer) entry.getValue());
} else if (entry.getValue() instanceof Float) {
bundle.putFloat(entry.getKey(), ((Float) entry.getValue()));
}
}
return bundle;
}
我正在使用我的kotlin Parcelable的實現來實現這一點,迄今爲止它適用於我。 有用的,如果你想避免重序列化。
爲了工作,我建議用 these宣言
class ParcelableMap<K,V>(val map: MutableMap<K,V>) : Parcelable {
constructor(parcel: Parcel) : this(parcel.readMap(LinkedHashMap<K,V>()))
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeMap(map)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<ParcelableMap<Any?,Any?>> {
@JvmStatic
override fun createFromParcel(parcel: Parcel): ParcelableMap<Any?,Any?> {
return ParcelableMap(parcel)
}
@JvmStatic
override fun newArray(size: Int): Array<ParcelableMap<Any?,Any?>?> {
return arrayOfNulls(size)
}
}
}
使用
寫
val map = LinkedHashMap<Int, String>()
val wrap = ParcelableMap<Int,String>(map)
Bundle().putParcelable("your_key", wrap)
閱讀
使用它而且
不要忘記,如果你的地圖K,V
默認情況下不瓜分,他們必須實現Parcelable
- 1. Ada HashMap in HashMap
- 2. Double in HashMap
- 3. Android中的HashMap vs Bundle效率和性能比較
- 4. Android Bundle = .NET Session []?
- 5. android onCreate(Bundle savedInstanceState)
- 6. Android Bundle NullPointer
- 7. Android onRestoreInstanceState(Bundle savedInstanceState)
- 8. Android Bundle Nullpointerexception
- 9. GoogleApiClient in Fragment Android
- 10. android bundle變爲0
- 11. AudioManager in android
- 12. 一致性緩存| ConcurrentHashMap in,HashMap out
- 13. HashMAp在android
- 14. Android Parcelable Parcel HashMap
- 15. Android HashMap問題
- 16. Xamarin Forms(Android):OnCreate bundle爲null
- 17. Symfony2 TitleCase in Bundle name產生命名空間錯誤和bundle配置
- 18. showNotification()in static android
- 19. Android破壞全局HashMap
- 20. youtubeactivity in android
- 21. getattribute在Android的listview與hashmap
- 22. 如何從Bundle中提取HashMap而不投射?
- 23. 數組,HashMap,字符串 - 如何通過Bundle發送它?
- 24. java.lang.ClassCastException:org.ksoap2.serialization.SoapObject in android
- 25. ArrayAdapter in Fragment - Android
- 26. screenshot in android
- 27. Android Bundle ADT更新問題
- 28. Android - 將接口放入Bundle
- 29. Android Bundle是共享內存?
- 30. Slackware64 Android Bundle Kit Segmentation fault
日Thnx所有Java和Android新手8)! – 2012-07-12 13:35:05
如果我們解決了您的問題,請接受任何答案。 thx – AMerle 2012-07-12 13:37:21
解決方法是在這裏:[Android的 - 如何通過HashMap之間的活動?](http://stackoverflow.com/a/11155142/379693) –
2012-07-12 13:37:46