【问题标题】:Why can't I pass an object array trough an intent?为什么我不能通过意图传递对象数组?
【发布时间】:2017-02-02 06:04:51
【问题描述】:

我想通过 IntentExtra 传递 Collection[] 数组,但它不起作用。

                Intent intent = new Intent(SzabadEuMusorokLeirasActivity.this, SzabadEuMusorokViewActivity.class);
            JSONdata jsonData = new JSONdata("http://1956.osaarchivum.org/api/items?collection=13");
            intent.putExtra("ARRAY_EXTRA", jsonData.getCollections());
            startActivity(intent);

在其他活动中:

Intent intent = getIntent();
    Parcelable[] parcelables = intent.getParcelableArrayExtra("ASD");
    mCollections = Arrays.copyOf(parcelables, parcelables.length, Collection[].class);

如果到达 mCollections = Arrays.copyOf(...) 行,则会收到 NullPointerException,因为 parcelables.length 为 null...

这里是 Collection 类:

public class Collection implements Parcelable{

private String mTitile;
private String mSubject;
private String mMediaURL;

public Collection() {}

protected Collection(Parcel in){
    mTitile = in.readString();
    mSubject = in.readString();
    mMediaURL = in.readString();
}

public static final Creator<Collection> CREATOR = new Creator<Collection>() {
    @Override
    public Collection createFromParcel(Parcel in) {
        return new Collection(in);
    }

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

public String getTitile() {
    return mTitile;
}

public void setTitile(String titile) {
    mTitile = titile;
}

public String getSubject() {
    return mSubject;
}

public void setSubject(String subject) {
    mSubject = subject;
}

public String getMediaURL() {
    return mMediaURL;
}

public void setMediaURL(String mediaURL) {
    mMediaURL = mediaURL;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(mTitile);
    dest.writeString(mSubject);
    dest.writeString(mMediaURL);
}

}

【问题讨论】:

标签: android arrays android-intent parcelable


【解决方案1】:

好吧,您使用“ARRAY_EXTRA”键添加额外内容,然后尝试使用“ASD”键将其提取到另一个Activity。那是行不通的。

    intent.putExtra("ARRAY_EXTRA", jsonData.getCollections());
    startActivity(intent);

在其他活动中:

    Intent intent = getIntent();
    Parcelable[] parcelables = intent.getParcelableArrayExtra("ASD");

【讨论】:

    【解决方案2】:

    您应该在 Intent 类上使用putParcelableArrayListExtra() 方法。 因为您在接收器活动中使用getParcelableArrayListExtra() 方法

    【讨论】:

      猜你喜欢
      • 2017-10-22
      • 2018-09-11
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多