android中对象弱引用的HashMap

QBL*_*ive 0 android

我们如何在android中使用对象中弱对象的HashMap来在活动之间传递复杂对象?我想将一个类的对象从一个活动传递到另一个活动,我怎么能在android中实现它.我知道我可以使用putExtra()方法.但是这种方法不会直接传递任何对象,而是传递简单的数据结构.请帮忙

提前致谢.

Sha*_*dul 5

我建议将捆绑从一个活动传递到另一个活动.

Cretae 实现 Parceblable接口的类

public class MyParcel implements Parcelable {
//A HASHMAP WHICH CAN HOLD ALL YOR OBJECTS
private HashMap<String,Object> activityParcel;

public MyParcel(){
    //INITIALIZING A HASHMAP
    activityParcel=new HashMap<String,Object>();

}

public void readFromParcel(Parcel in) {
    int count = in.readInt();
    for (int i = 0; i < count; i++) {
        activityParcel.put(in.readString(), in.readValue(Object.class.getClassLoader()));
    }
}

public MyParcel(Parcel in) {
    activityParcel = new HashMap<String,Object>();
    readFromParcel(in);
}

@Override
public int describeContents() {
    return activityParcel!=null?activityParcel.size():0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(activityParcel.size());
    for (String s: (Set<String>)activityParcel.keySet()) {
        dest.writeString(s);
        dest.writeValue(activityParcel.get(s));
    }

}
//MANDATORY CLASS MEMBER ,NAME CREATOR IS ALSO MANDATED
public static final Parcelable.Creator<MyParcel> CREATOR=new Parcelable.Creator<MyParcel>() {

    @Override
    public MyParcel createFromParcel(Parcel source) {
        return new MyParcel(source);
    }

    @Override
    public MyParcel[] newArray(int size) {
        return new MyParcel[size];
    }

};

public Object get(String key){
    return activityParcel.get(key);
}


public void put(String key, Object value) {
    activityParcel.put(key, value);
}




}
Run Code Online (Sandbox Code Playgroud)

现在,如果您要将包裹从活动A发送到活动B.

MyParcel myParcel=new MyParcel();
myParcel.put("MyObject", new Date());//sends a blank date object.
Bundle myBundle = new Bundle();
myBundle.putParcelable("My Bundle Key", myParcel);
Intent contentIntent=new Intent(ActivityA.this,ActivityB.class);
startActivity(contentIntent);
Run Code Online (Sandbox Code Playgroud)

现在来自ActivityB:

Bundle contetnBundle = getIntent().getExtras();

MyParcel myParcel = contetnBundle.getParcelable("My Bundle Key");
Date myDateWithActivityA=(Date)myParcel.get("MyObject");
Run Code Online (Sandbox Code Playgroud)