【问题标题】:Android - How to pass HashMap<String,String> between activities?Android - 如何在活动之间传递 HashMap<String,String>?
【发布时间】:2011-06-26 21:35:03
【问题描述】:

如何将detailHashMap 传递给另一个Activity?

HashMap<String,String> detail = new HashMap<String, String>();
detail.add("name","paresh");
detail.add("surname","mayani");
detail.add("phone","99999");
......
......

【问题讨论】:

  • stackoverflow.com/questions/4154744/… 这将对您有所帮助。并且以另一种方式使您的 HashMap 成为公共和静态的,在调用者活动中设置其值并将其值用于被调用活动。在向 HashMap 添加值之前,请清除其先前的值。
  • @pankaj 我没有从上面的链接代码中得到任何东西
  • @Tanmay 请不要更改 OP 的代码。添加评论或答案来概述更改。 (拒绝编辑)
  • @Pekka 没问题。我只是想确定正确的事情
  • 你可以将你的 hashMap 设为 public static 吗?我可以解释一下。

标签: android android-activity hashmap


【解决方案1】:

这很简单,所有Collections 对象都实现Serializable(sp?)interface,这意味着它们可以作为附加在Intent 中传递

使用putExtra(String key, Serializable obj) 插入HashMap,另一个Activity 使用getIntent().getSerializableExtra(String key),但您需要将返回值转换为HashMap

【讨论】:

  • 对不起。如果我可以有一个 HaspMap 怎么办?可以序列化吗?值 Objects 只是 int、String 或 float 类型。没有自定义对象类型。
  • 请记住,地图不会被序列化。如果可能的话,它将被内部包裹。然后你会在另一边得到一个 HashMap,尽管你已经放了 LinkedHashMap 或任何其他地图。
  • “你需要转换返回值”——这就是我所缺少的。
  • 我收到“未经检查的演员表”警告
  • “未经检查的演员表”警告基本上是在说“你靠自己”;)
【解决方案2】:

另一种方法是,如果信息可能被视为应用程序的“全局”信息,则使用Application 类。您只需扩展它,然后使用 标记在清单中定义您的自定义类。不过,请谨慎使用。滥用它的冲动很高。

【讨论】:

  • 感谢支持和“新”信息,但我只需要在两个活动之间传递 HashMap,即从活动 A 到活动 B
  • 我想通了。只是想提供它作为替代品。
【解决方案3】:

解决方案:

发件人活动:

HashMap<String, String> hashMap= adapter.getItem(position);
Intent intent = new Intent(SourceActivity.this, DestinationActivity.class);
intent.putExtra("hashMap", hashMap);
startActivity(intent);

接收者活动:

Intent intent = getIntent();    
HashMap<String, String> hashMap = (HashMap<String, String>) intent.getSerializableExtra("hashMap");

【讨论】:

  • 您好,我在运行时收到包裹错误。 java.lang.RuntimeException: Parcel: unable to marshal value 我正在传递 HaspMap
  • @anish bcz JSONArray 不可序列化。
  • 感谢朋友,虽然回复晚了,但感谢您的帮助。 :) @Abubakar
【解决方案4】:

我用它来传递我的 HashMap

startActivity(new Intent(currentClass.this,toOpenClass.class).putExtra("hashMapKey", HashMapVariable));

并在接收活动上写

HashMap<String,String> hm = (HashMap<String,String>) getIntent().getExtras().get("hashMapKey");

因为我知道我的 hashmap 包含字符串作为值。

【讨论】:

  • 您确定可以使用 getExtras.get("key") 获取 HashMap 吗?
  • 是的...只要您将“HashMap”传递给接收活动
【解决方案5】:

这里我展示了示例代码供您参考。我刚刚尝试了这段代码,它对我来说很好。检查这个:

主要活动:

    final HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
    hashMap.put(1, "Hi");

    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub              

            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            intent.putExtra("h", hashMap);
            startActivity(intent);

        }
    });

第二个活动:

Toast.makeText(SecondActivity.this,"Hi " +  getIntent().getSerializableExtra("h").toString(),Toast.LENGTH_SHORT).show();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2021-11-13
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多