android.os.Message
sử dụng Bundle
để gửi bằng phương thức sendMessage. Do đó, có thể đặt HashMap
bên trong một Bundle
không?Android HashMap trong Gói?
Trả lời
thử như:
Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);
và Hoạt động thứ hai
Bundle bundle = this.getIntent().getExtras();
if(bundle != null) {
hashMap = bundle.getSerializable("HashMap");
}
vì Hashmap bởi dụng cụ mặc định Serializable
để bạn có thể vượt qua nó bằng cách sử putSerializable
trong Bundle và nhận được vào các hoạt động khác sử dụng getSerializable
Tôi gặp lỗi khi cố gắng tuần tự hóa bản đồ băm liên kết Bưu kiện: không thể so sánh giá trị com .SGID.DataClass.InvalidSubscriptionReasonsData @ 41bd2b98 –
Làm thế nào tôi có thể truy cập đối tượng serializable Hash_Map ??? –
@Rani: vẫn gặp sự cố hoặc giải quyết? –
Theo số doc, Hashmap
thực hiện Serializable
, vì vậy bạn có thể putSerializable
Tôi đoán vậy. Bạn đã thử à ?
Nếu bạn muốn gửi tất cả các phím trong gói, bạn có thể thử
for(String key: map.keySet()){
bundle.putStringExtra(key, map.get(key));
}
Tôi tò mò nếu có lý do gì để không làm điều này? Tôi đã không sử dụng serialization nhiều, và không bao giờ bó (mới cho android), vì vậy tôi tò mò nếu điều này là O (n) và phụ thêm vào một bó có hiệu quả O (1) hay không. Nếu chúng không khác về chi phí, không thấy lý do tại sao bạn bận tâm với việc tuần tự hóa nó vào một bản đồ khác. –
Xin lưu ý: Nếu bạn đang sử dụng một AppCompatActivity, bạn sẽ phải gọi phương thức protected void onSaveInstanceState(Bundle outState) {}
(KHÔNGpublic void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {}
).
Ví dụ mã ...
Store bản đồ:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("leftMaxima", leftMaxima);
outState.putSerializable("rightMaxima", rightMaxima);
}
Và nhận được nó trong onCreate:
if (savedInstanceState != null) {
leftMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("leftMaxima");
rightMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("rightMaxima");
}
Xin lỗi nếu đó là một số loại một câu trả lời trùng lặp - có lẽ ai đó sẽ tìm thấy nó hữu ích. :)
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;
}
Tôi đang sử dụng việc thực hiện kotlin của tôi để đạt được điều đó và cho đến nay nó hoạt động cho tôi. Hữu ích nếu bạn muốn tránh serializable nặng.
Cũng trong trật tự để làm việc tôi khuyên bạn nên sử dụng nó với these
Tuyên bố
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)
}
}
}
Sử dụng
ghi
val map = LinkedHashMap<Int, String>()
val wrap = ParcelableMap<Int,String>(map)
Bundle().putParcelable("your_key", wrap)
đọc
val bundle = fragment.arguments ?: Bundle()
val wrap = bundle.getParcelable<ParcelableMap<Int,String>>("your_key")
val map = wrap.map
Đừng quên rằng nếu bản đồ của bạn K,V
không parceled theo mặc định thì phải thực hiện Parcelable
- 1. vấn đề Deserialization HashMap trong Android
- 2. HashMap trong vòng một HashMap
- 3. ID gói trong android
- 4. Persist HashMap trong ORMLite
- 5. Gán Hashmap thành Hashmap
- 6. Tìm kiếm một HashMap trong một ArrayList của HashMap
- 7. HashMap
- 8. Làm thế nào để lưu trữ HashMap trên Android?
- 9. Kết nối mạng gói trong Android
- 10. Lặp qua 'Hashmap' trong JavaScript
- 11. Chuỗi là khóa trong hashmap
- 12. HashMap profiling
- 13. HashMap Serializability
- 14. android, cách lấy tên gói?
- 15. Gói javax.annotation.processing Android bị thiếu
- 16. Làm thế nào để đặt tất cả giá trị trong arraylist vào hashmap trong android?
- 17. Phương thức trả về HashMap
- 18. Android ListFragment không lưu gói trong onSaveInstanceState()/không truy xuất gói trong onActivityCreated()
- 19. Làm thế nào để in tất cả các khóa và giá trị từ HashMap trong Android?
- 20. hashmap trong quản lý bền bỉ
- 21. Return Giá trị đặt() trong HashMap: Java
- 22. Tìm kiếm một phần trong HashMap
- 23. Nhận chìa khóa từ HashMap trong Java
- 24. Kiểm tra tồn tại khóa trong HashMap
- 25. Lưu trữ một mảng trong HashMap
- 26. Phát triển Hashmap của vectơ trong Matlab
- 27. Java - lấy chỉ mục khóa trong HashMap?
- 28. Hashcode cho khóa NULL trong HashMap
- 29. Độ phân giải va chạm trong HashMap
- 30. Bắt đầu điều đầu tiên trong HashMap?
java và Android người mới 8) thnx cho tất cả! –
Chấp nhận bất kỳ câu trả lời nào nếu chúng tôi giải quyết được sự cố của bạn. thx – AMerle
Giải pháp là ở đây: [Android - Làm thế nào để vượt qua HashMap giữa các hoạt động?] (http://stackoverflow.com/a/11155142/379693) –