【问题标题】:Sending LinkedHashMap to intent将 LinkedHashMap 发送到意图
【发布时间】:2010-11-12 11:16:36
【问题描述】:

我想将 LinkedHashMap 发送到另一个 Intent。但我不知道允许使用哪种额外方法。

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

【问题讨论】:

    标签: android android-intent linkedhashmap


    【解决方案1】:

    您无法可靠地将LinkedHashMap 作为Intent 额外发送。当您使用LinkedHashMap 调用putExtra() 时,Android 会看到该对象实现了Map 接口,因此它将名称/值对序列化为Bundle 中的额外Intent。当你想在另一边提取它时,你得到的是HashMap,而不是LinkedHashMap。不幸的是,你得到的这个HashMap 已经失去了排序,这就是你最初想使用LinkedHashMap 的原因。

    唯一可靠的方法是将LinkedHashMap转换为有序数组,将数组放入Intent,在接收端从Intent中提取数组,然后重新创建@987654336 @。

    查看my answer to this question了解更多血腥细节。

    【讨论】:

      【解决方案2】:

      最好的办法是把它转成同类型的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);
      

      【讨论】:

        【解决方案3】:

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

        我有另一种方法是使用Gson 将您的任何map 解析为json string,然后放入intent。少一点戏剧性!

        代码发送:

        gson.toJson(data)
        

        代码返回:

        科特林:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-15
          • 1970-01-01
          • 2012-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多