通过Android意图传递HashMap

我有一个HashMap(String,HashMap(String,Object))在我的一个活动。 我如何通过意图发送这个HashMap到另一个活动

如何将这个HashMap添加到intent extras中?

发送HashMap

HashMap<String, Object> hashmapobject =new HashMap<>(); HashMap<String, Object> newhashMap=new HashMap<>(); hashmapobject.put("key",newhashMap); Intent intent = new Intent(SenderActivity.this, NextActivity.class); intent.putExtra("hashMapKey", hashmapobject); startActivity(intent); 

接收HashMap

 Intent intent = getIntent(); HashMap<String, Object> hashMapObject = (HashMap<String, Object>) intent.getSerializableExtra("hashMapKey"); HashMap<String, Object> newhashMap=(HashMap<String, Object>)hashMapObject.get("key"); 

你的问题可能有多种方法,每一种方法都取决于你在map上存储的数据类型。 最简单的方法是从json.org使用JSONObject传递它作为字符串,并在接收时转换回JSON。 JSONObject使用一个LinkedHashMap里面,因此你将能够使用HashMap的功能。

 JSONObject obj=new JSONObject(); obj.put("key1", "value1"); obj.put("key2", "value2"); obj.put("key3", "value3"); . . . obj.put("keyN", "valueN"); intent.putExtra("map", obj.toString()); 

在接收时

 JSONObject obj=new JSONObject(getIntent().getStringExtra("map")); 

对于复杂的数据类型,可以考虑使用GSON这样的JSON库或使用Parcelable接口。

嗨,你可以使用Parcelable:

写这样的课:

 public class Person implements Parcelable { String name; int age; Date brithDate; public Person(String name, int age, Date brithDate) { this.name = name; this.age = age; this.brithDate = brithDate; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.name); dest.writeInt(this.age); dest.writeLong(brithDate != null ? brithDate.getTime() : -1); } protected Person(Parcel in) { this.name = in.readString(); this.age = in.readInt(); long tmpbrithDate = in.readLong(); this.brithDate = tmpbrithDate == -1 ? null : new Date(tmpbrithDate); } public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { public Persona createFromParcel(Parcel source) { return new Person(source); } public Person[] newArray(int size) { return new Person[size]; } }; 

把额外的:

 intent.putExtra("person", new Person("Ahmad",34,date)); 

获取:

 Bundle data = getIntent().getExtras(); Person person= (Person) data.getParcelable("person"); 

或者你可以复制这个网站的类,并转换为Parcelable类:

http://www.parcelabler.com/

或者你可以使用这个库hrisey

https://github.com/mg6maciej/hrisey/wiki/Parcelable#details

或者你可以使用Android Studio有这个插件:

  • Android Parcelable代码生成器 (Apache许可证2.0)
  • 自动包裹(MIT许可证)
  • SerializableParcelable Generator(MIT许可证)
  • 可分发代码生成器(用于Kotlin)(Apache许可证2.0)