在我的某个活动中有一个HashMap(String,HashMap(String,Object))。我该如何通过意图(Intent)将此HashMap发送到另一个活动中呢?
如何将此HashMap添加到Intent额外数据中?
如何将此HashMap添加到Intent额外数据中?
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"));
对于复杂的数据类型,可以考虑使用 JSON 库,如 GSON,或使用 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类:
或者你可以使用这个库hrisey
https://github.com/mg6maciej/hrisey/wiki/Parcelable#details
或者您可以使用Android Studio的插件来完成此操作: