将LinkedHashMap发送到意图(Intent)

6

我想把LinkedHashMap发送到另一个Intent中。但我不知道哪种extras方法是可行的。

Bundle extras = getIntent().getExtras();
  LinkedHashMap<Integer, String[]> listItems = extras.get(LIST_TXT);
3个回答

6
您不能可靠地将LinkedHashMap作为Intent extra发送。当您使用LinkedHashMap调用putExtra()时,Android会看到该对象实现了Map接口,因此它将名称/值对序列化到Intent中的extras Bundle中。当您想要在另一端提取它时,得到的是一个HashMap,而不是LinkedHashMap。不幸的是,您得到的这个HashMap已经失去了最初想要使用LinkedHashMap的原因,即排序功能。
唯一可靠的方法是将LinkedHashMap转换为有序数组,将数组放入Intent中,在接收端从Intent中提取数组,然后重新创建LinkedHashMap
有关更多详细信息,请参见我的回答

0

感谢@David Wasser指出这个问题。

我有另一种方法,就是使用Gson来解析你的任何mapjson字符串,然后放入intent。少点戏剧!

发送的代码:

gson.toJson(data)

代码返回:

Kotlin:

gson.fromJson<LinkedHashMap<Int, Int>>(
                    it.getStringExtra(ARG_DATA),
                    object : TypeToken<LinkedHashMap<Int, Int>>() {}.type
                )

Java:

gson.fromJson(
     it.getStringExtra(ARG_DATA),
     new TypeToken<ArrayList<Mountain>>(){}.getType()
);

0

最好的方法是将其转换为相同类型的ArrayList
例如:

 LinkedHashSet<Long> uniqueIds = new LinkedHashSet();
 ArrayList<Long> ids = new ArrayList(uniqueIds);
    
 Intent intent = new Intent(getContext(), UserStoryActivity.class);
 intent.putParcelableArrayListExtra(FLAG_USERS_STORY_LIST_IDS, (ArrayList) ids);
 startActivity(intent);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接