将 LinkedHashMap 发送到意图
我想将 LinkedHashMap 发送到另一个 Intent。但我不知道什么方法是允许的。
Bundle extras = getIntent().getExtras();
LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
I want send LinkedHashMap to another Intent. But I don't known what method for extras is allowable.
Bundle extras = getIntent().getExtras();
LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您无法可靠地将
LinkedHashMap
作为Intent
extra 发送。当您使用LinkedHashMap
调用putExtra()
时,Android 会发现该对象实现了Map
接口,因此它将名称/值对序列化为Intent
中的额外Bundle
。当你想在另一边提取它时,你得到的是一个HashMap
,而不是一个LinkedHashMap
。不幸的是,您获得的这个HashMap
丢失了顺序,这正是您想要使用LinkedHashMap
的首要原因。唯一可靠的方法是将
LinkedHashMap
转换为有序数组,将数组放入Intent
中,从Intent
中提取数组> 在接收端,然后重新创建LinkedHashMap
。请参阅我的回答这个问题以获取更多血淋淋的细节。
You cannot reliably send a
LinkedHashMap
as anIntent
extra. When you callputExtra()
with aLinkedHashMap
, Android sees that the object implements theMap
interface, so it serializes the name/value pairs into the extrasBundle
in theIntent
. When you want to extract it on the other side, what you get is aHashMap
, not aLinkedHashMap
. Unfortunately, thisHashMap
that you get has lost the ordering that was the reason you wanted to use aLinkedHashMap
in the first place.The only reliable way to do this is to convert the
LinkedHashMap
to an ordered array, put the array into theIntent
, extract the array from theIntent
on the receiving end, and then recreate theLinkedHashMap
.See my answer to this question for more gory details.
最好的方法是将其转换为相同类型的 ArrayList
例如:
The best way is to convert it to ArrayList of the same type
examble :
感谢@David Wasser 指出这个问题。
我有另一种方法是使用 Gson 将您的任何映射解析为 json 字符串,然后放入意图中。戏少了!
代码发送:
代码返回:
Kotlin:
Java:
Thanks @David Wasser for pointing out this issue.
I have another approach is to use
Gson
to parse your whatevermap
tojson string
, then put into theintent
. Less drama!Code send:
Code get back:
Kotlin:
Java: