通过android意图传递Hashmap

时间:2016-07-31 14:49:12

标签: android android-intent hashmap

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

如何将此HashMap添加到intent extras?

3 个答案:

答案 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类:

http://www.parcelabler.com/

或者您可以使用此库hrisey

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

或者您可以使用Android Studio插件:

  • Android Parcelable code generator(Apache License 2.0)
  • 自动包裹(麻省理工学院许可证)
  • SerializableParcelable Generator(麻省理工学院许可证)
  • Parcelable Code Generator(适用于Kotlin)(Apache License 2.0)