我的一个活动中有一个HashMap(String,HashMap(String,Object))。如何通过意图将此HashMap发送到另一个活动
如何将此HashMap添加到intent extras?
答案 0 :(得分:2)
发送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");
答案 1 :(得分:0)
您的问题可能有多种方法,每种方法取决于您在map
中存储的数据类型。最简单的方法是使用json.org中的JSONObject将其作为String传递,同时接收将其转换回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接口。
答案 2 :(得分:0)
您好,您可以使用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类:
或者您可以使用此库hrisey
https://github.com/mg6maciej/hrisey/wiki/Parcelable#details
或者您可以使用Android Studio插件: