簡體   English   中英

通過intent(Parcelable)傳遞自定義對象將返回null

[英]Passing custom object via intent(Parcelable) returns null

我已經通過自動插件生成了Parcelable類,所以我真的不能認為CustomUser類代碼中存在任何錯誤,無論我如何故意傳遞它並嘗試接收它,我仍然會得到null。 我做錯了什么? 自動生成是否還需要進行其他修改?

public class CustomUser implements Parcelable {

    public CustomUser() {
    }

    public CustomUser(String age, String date_of_birth, String description, String name, String photo_link, String sex) {
        this.age = age;
        this.date_of_birth = date_of_birth;
        this.description = description;
        this.name = name;
        this.photo_link = photo_link;
        this.sex = sex;
        this.defaultGender = defaultGender;
    }

    private String age;
    private String date_of_birth;
    private String description;
    private String uid;



    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    private String name;
    private String photo_link;
    private String sex;
    private String[] defaultGender = {"default_gender"};

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getDate_of_birth() {
        return date_of_birth;
    }

    public void setDate_of_birth(String date_of_birth) {
        this.date_of_birth = date_of_birth;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getPhoto_link() {
        return photo_link;
    }

    public void setPhoto_link(String photo_link) {
        this.photo_link = photo_link;
    }


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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.age);
        dest.writeString(this.date_of_birth);
        dest.writeString(this.description);
        dest.writeString(this.uid);
        dest.writeString(this.name);
        dest.writeString(this.photo_link);
        dest.writeString(this.sex);
        dest.writeStringArray(this.defaultGender);
    }

    protected CustomUser(Parcel in) {
        this.age = in.readString();
        this.date_of_birth = in.readString();
        this.description = in.readString();
        this.uid = in.readString();
        this.name = in.readString();
        this.photo_link = in.readString();
        this.sex = in.readString();
        this.defaultGender = in.createStringArray();
    }

    public static final Parcelable.Creator<CustomUser> CREATOR = new Parcelable.Creator<CustomUser>() {
        @Override
        public CustomUser createFromParcel(Parcel source) {
            return new CustomUser(source);
        }

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

MainActivity.class

customUser = documentSnapshot.toObject(CustomUser.class);
Log.d(TAG, "CustomUser not null : " + customUser.getName());  // its OK
Intent intent = new Intent(getApplicationContext(),SearchActivity.class);
intent.putExtra("parcelable",customUser);
startActivity(intent);

SearchActivity.class

 Intent i = getIntent();
CustomUser customUser = i.getParcelableExtra("parcelable");
Log.d(TAG, "onCreate123123: "+customUser.getName());

使用Gson將Object轉換為String並將String轉換為Object:Library: compile 'com.google.code.gson:gson:2.8.2'

customUser = documentSnapshot.toObject(CustomUser.class);
// send data
    Gson gson=new Gson();
    String objAsString=gson.toJson(customUser);
    Intent intent = new Intent(getApplicationContext(),SearchActivity.class);
    intent.putExtra("data",objAsString);
    startActivity(intent);

    // get Data
    Gson gson=new Gson();
    String value=getIntent().getStringExtra("data");
    CustomUser customerData=gson.fromJson(value,CustomUser.class);

用下面的代碼替換您的代碼,

您需要投射包裹對象。

Intent i = getIntent();
CustomUser customUser = (CustomUser)i.getParcelable("parcelable");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM