intent在第二个activity中发送pojo对象,在第二个activity对象get中,inside对象内部列表返回null

时间:2018-03-15 07:48:12

标签: android android-intent parcelable

我使用意图从一个类发送到我的pojo对象

成功发送并成功从另一个类中检索

但是当我从retrive pojo检查内部数据时 我的内部arraylist名称链接和手机返回null; 我不知道为什么,因为我的其他数据名称和数据已填写但arraylist不填写

this i retrive data using intent

this i send data using intent

我的pojo课程是

public class Datum implements Parcelable {

@SerializedName("assigned_to")
private String mAssignedTo;
@SerializedName("contact_id")
private String mContactId;
@SerializedName("created_date")
private String mCreatedDate;
@SerializedName("first_name")
private String mFirstName;
@SerializedName("img")
private String mImg;
@SerializedName("last_name")
private String mLastName;
@SerializedName("links")
private List<Link> mLinks;
@SerializedName("modified_date")
private String mModifiedDate;
@SerializedName("phone")
private List<Phone> mPhone;
@SerializedName("photo")
private String mPhoto;
@SerializedName("salutation")
private String mSalutation;
@SerializedName("subscription_id")
private String mSubscriptionId;
@SerializedName("type")
private String mType;
private boolean isChecked;

protected Datum(Parcel in) {
    mAssignedTo = in.readString();
    mContactId = in.readString();
    mCreatedDate = in.readString();
    mFirstName = in.readString();
    mImg = in.readString();
    mLastName = in.readString();
    mModifiedDate = in.readString();
    mPhoto = in.readString();
    mSalutation = in.readString();
    mSubscriptionId = in.readString();
    mType = in.readString();
    isChecked = in.readByte() != 0;
}

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

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

public boolean isChecked() {
    return isChecked;
}

public void setChecked(boolean checked) {
    isChecked = checked;
}

public String getAssignedTo() {
    return mAssignedTo;
}

public void setAssignedTo(String assignedTo) {
    mAssignedTo = assignedTo;
}

public String getContactId() {
    return mContactId;
}

public void setContactId(String contactId) {
    mContactId = contactId;
}

public String getCreatedDate() {
    return mCreatedDate;
}

public void setCreatedDate(String createdDate) {
    mCreatedDate = createdDate;
}

public String getFirstName() {
    return mFirstName;
}

public void setFirstName(String firstName) {
    mFirstName = firstName;
}

public String getImg() {
    return mImg;
}

public void setImg(String img) {
    mImg = img;
}

public String getLastName() {
    return mLastName;
}

public void setLastName(String lastName) {
    mLastName = lastName;
}

public List<Link> getLinks() {
    return mLinks;
}

public void setLinks(List<Link> links) {
    mLinks = links;
}

public String getModifiedDate() {
    return mModifiedDate;
}

public void setModifiedDate(String modifiedDate) {
    mModifiedDate = modifiedDate;
}

public List<Phone> getPhone() {
    return mPhone;
}

public void setPhone(List<Phone> phone) {
    mPhone = phone;
}

public String getPhoto() {
    return mPhoto;
}

public void setPhoto(String photo) {
    mPhoto = photo;
}

public String getSalutation() {
    return mSalutation;
}

public void setSalutation(String salutation) {
    mSalutation = salutation;
}

public String getSubscriptionId() {
    return mSubscriptionId;
}

public void setSubscriptionId(String subscriptionId) {
    mSubscriptionId = subscriptionId;
}

public String getType() {
    return mType;
}

public void setType(String type) {
    mType = type;
}



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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(mAssignedTo);
    dest.writeString(mContactId);
    dest.writeString(mCreatedDate);
    dest.writeString(mFirstName);
    dest.writeString(mImg);
    dest.writeString(mLastName);
    dest.writeString(mModifiedDate);
    dest.writeString(mPhoto);
    dest.writeString(mSalutation);
    dest.writeString(mSubscriptionId);
    dest.writeString(mType);
    dest.writeByte((byte) (isChecked ? 1 : 0));
}
}

这是我的链接pojo

public class Link implements Parcelable {

@SerializedName("company")
private String mCompany;
@SerializedName("company_id")
private String mCompanyId;
@SerializedName("edit")
private String mEdit;
@SerializedName("id")
private String mId;
@SerializedName("img")
private String mImg;
@SerializedName("logo")
private String mLogo;
@SerializedName("record_type")
private String mRecordType;
@SerializedName("relation")
private String mRelation;

protected Link(Parcel in) {
    mCompany = in.readString();
    mCompanyId = in.readString();
    mEdit = in.readString();
    mId = in.readString();
    mImg = in.readString();
    mLogo = in.readString();
    mRecordType = in.readString();
    mRelation = in.readString();
}

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

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

public String getCompany() {
    return mCompany;
}

public void setCompany(String company) {
    mCompany = company;
}

public String getCompanyId() {
    return mCompanyId;
}

public void setCompanyId(String companyId) {
    mCompanyId = companyId;
}

public String getEdit() {
    return mEdit;
}

public void setEdit(String edit) {
    mEdit = edit;
}

public String getId() {
    return mId;
}

public void setId(String id) {
    mId = id;
}

public String getImg() {
    return mImg;
}

public void setImg(String img) {
    mImg = img;
}

public String getLogo() {
    return mLogo;
}

public void setLogo(String logo) {
    mLogo = logo;
}

public String getRecordType() {
    return mRecordType;
}

public void setRecordType(String recordType) {
    mRecordType = recordType;
}

public String getRelation() {
    return mRelation;
}

public void setRelation(String relation) {
    mRelation = relation;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(mCompany);
    dest.writeString(mCompanyId);
    dest.writeString(mEdit);
    dest.writeString(mId);
    dest.writeString(mImg);
    dest.writeString(mLogo);
    dest.writeString(mRecordType);
    dest.writeString(mRelation);
}

}

这是数字pojo

public class Phone implements Parcelable{

@SerializedName("flagecode")
private String mFlagecode;
@SerializedName("id")
private String mId;
@SerializedName("is_primary")
private String mIsPrimary;
@SerializedName("phone_type")
private String mPhoneType;
@SerializedName("phone_type_id")
private String mPhoneTypeId;
@SerializedName("value")
private String mValue;

protected Phone(Parcel in) {
    mFlagecode = in.readString();
    mId = in.readString();
    mIsPrimary = in.readString();
    mPhoneType = in.readString();
    mPhoneTypeId = in.readString();
    mValue = in.readString();
}

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

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

public String getFlagecode() {
    return mFlagecode;
}

public void setFlagecode(String flagecode) {
    mFlagecode = flagecode;
}

public String getId() {
    return mId;
}

public void setId(String id) {
    mId = id;
}

public String getIsPrimary() {
    return mIsPrimary;
}

public void setIsPrimary(String isPrimary) {
    mIsPrimary = isPrimary;
}

public String getPhoneType() {
    return mPhoneType;
}

public void setPhoneType(String phoneType) {
    mPhoneType = phoneType;
}

public String getPhoneTypeId() {
    return mPhoneTypeId;
}

public void setPhoneTypeId(String phoneTypeId) {
    mPhoneTypeId = phoneTypeId;
}

public String getValue() {
    return mValue;
}

public void setValue(String value) {
    mValue = value;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(mFlagecode);
    dest.writeString(mId);
    dest.writeString(mIsPrimary);
    dest.writeString(mPhoneType);
    dest.writeString(mPhoneTypeId);
    dest.writeString(mValue);
}

}

我发送我的数据

Intent iEditContact = new Intent(JsonParseActivity.this, EditContatctActivity.class);
                iEditContact.putExtra(Constant.intent_key_edit_contact, contact);
                startActivityForResult(iEditContact, Constant.edt_contect_request_code);

并收到

if (iContact != null && iContact.hasExtra(Constant.intent_key_edit_contact)) {
            contact = iContact.getParcelableExtra(Constant.intent_key_edit_contact);

3 个答案:

答案 0 :(得分:0)

您必须在writeToParcel(Parcel dest, int flags)Phone(Parcel in)

中初始化mLinks
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mCompany);
dest.writeString(mCompanyId);
dest.writeString(mEdit);
dest.writeTypedList(mLinks );
dest.writeString(mId);
dest.writeString(mImg);
dest.writeString(mLogo);
dest.writeString(mRecordType);
dest.writeString(mRelation);
 }

还有构造函数

protected Phone(Parcel in) {
mFlagecode = in.readString();
mId = in.readString();
mLinks=new List<>();
in.readTypedList(mLinks, Phone.CREATOR);
mIsPrimary = in.readString();
mPhoneType = in.readString();
mPhoneTypeId = in.readString();
mValue = in.readString();

}

这适用于您的情况

答案 1 :(得分:0)

您的Datum模型类缺少writeList()和阅读。这就是为什么这些字段为null的原因。您的方法应如下所示。

 protected Datum(Parcel in) {
    this.mContactId = in.readString();
    this.mAssignedTo = in.readString();
    this.mCreatedDate = in.readString();
    this.mFirstName = in.readString();
    this.mImg = in.readString();
    this.mLastName = in.readString();
    this.mLinks = new ArrayList<Link>();
    in.readList(this.mLinks, Link.class.getClassLoader());
    this.mModifiedDate = in.readString();
    this.mPhone = new ArrayList<Phone>();
    in.readList(this.mPhone, Phone.class.getClassLoader());
    this.mPhoto = in.readString();
    this.mSalutation = in.readString();
    this.mSubscriptionId = in.readString();
    this.mType = in.readString();
    this.isChecked = in.readByte() != 0;
}

  @Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(this.mContactId);
    dest.writeString(this.mAssignedTo);
    dest.writeString(this.mCreatedDate);
    dest.writeString(this.mFirstName);
    dest.writeString(this.mImg);
    dest.writeString(this.mLastName);
    dest.writeList(this.mLinks);
    dest.writeString(this.mModifiedDate);
    dest.writeList(this.mPhone);
    dest.writeString(this.mPhoto);
    dest.writeString(this.mSalutation);
    dest.writeString(this.mSubscriptionId);
    dest.writeString(this.mType);
    dest.writeByte(this.isChecked ? (byte) 1 : (byte) 0);
}

为了便于理解和生成Parcelable,我建议您在IDE中添加Android Parcelable代码生成器插件。
GOTO设置&gt;插件&gt;浏览存储库&gt;键入Parcelable

答案 2 :(得分:0)

首先抱歉因为我的英语不好

您缺少写入和读取链接和电话列表 只需编写完全代码的ADM代码就可以了。

添加构造函数

mLinks = new ArrayList<Link>();
in.readList(this.mLinks, Link.class.getClassLoader());
mPhone = new ArrayList<Phone>();
in.readList(this.mPhone, Phone.class.getClassLoader());

和writeToParcel()

dest.writeList(mLinks);
dest.writeList(mPhone);