如何使用意图将哈希图值发送到另一个活动


76

如何将HashMap价值从一个Intent传递到另一个Intent?

另外,如何HashMap在第二个Activity中检索该值?


1
嗨,您要发送哪个值(整数,字符串,双精度数..)?
naresh 2011年

表示我要发送的字符串值
Piyush

@Piyush ..在JesusFreke的答案中,这样做是为了获取值,String [] val = new String [hashMap.size]; (hasMap.values).toArray(val);
ngesh 2011年

我们无法直接通过Intent发送哈希映射。或者,创建两个数组列表,一个是保存键,另一个是保存值。现在通过意图发送这两个数组列表,在另一个类中,您将获得两个数组列表,现在创建一个空的Hashmap并添加键值。要获取键和值,请循环使用对应的键的键arraylist从值arraylist中获取值。
ilango j 2011年

Answers:


201

Java的HashMap类扩展了Serializable接口,使用该Intent.putExtra(String, Serializable)方法可以轻松将其添加到意图中。

在接收到该意图的活动/服务/广播接收器中,然后 Intent.getSerializableExtra(String)使用与putExtra一起使用的名称进行调用。

例如,发送意图时:

HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("key", "value");
Intent intent = new Intent(this, MyOtherActivity.class);
intent.putExtra("map", hashMap);
startActivity(intent);

然后在接收活动中:

protected void onCreate(Bundle bundle) {
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("map");
    Log.v("HashMapTest", hashMap.get("key"));
}

25
请注意,HashMaps进行序列化。地图显然没有。
R Earle Harris

5
Map是一个接口-您不能序列化一个接口,而只能序列化它的特定实现。在这种情况下,Map本身不会实现/扩展Serializable接口,因此,是否要实现Serializable取决于特定的实现。HashMap确实实现了它。
JesusFreke

1
嗨,我正在从一个活动发送一个HashMap <String,Object>作为可序列化的额外内容,以获取另一个活动的结果。因此,我打算返回结果。当我尝试从意图中检索HashMap时,(HashMap <String,Object>)intent.getSerializableExtra(“ map”); 返回null。是因为我正在使用HashMap <String,Object>还是因为我是从为另一个活动的结果而创建的活动中发送它的?
marienke

1
@marienke我以这种方式在项目中使用了HashMap <String,Object>,它工作正常。我想您的问题可能是后者,祝您好运。
inexcii 2014年

3
我以这种方式收到演员警告
天网

5

我希望这也行得通。

在发送活动中

Intent intent = new Intent(Banks.this, Cards.class);
intent.putExtra("selectedBanksAndAllCards", (Serializable) selectedBanksAndAllCards);
startActivityForResult(intent, 50000);

在接收活动中

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

当我发送如下的HashMap时,

Map<String, ArrayList<String>> selectedBanksAndAllCards = new HashMap<>();

希望对别人有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.