简体   繁体   English

通过intent(Parcelable)传递自定义对象将返回null

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

I have generated Parcelable class by auto-plugin so I can't really think that there are mistakes made in CustomUser class code, still, no matter how I pass it in intent and try to receive it, I am still getting nulls. 我已经通过自动插件生成了Parcelable类,所以我真的不能认为CustomUser类代码中存在任何错误,无论我如何故意传递它并尝试接收它,我仍然会得到null。 What is it that I am doing wrong? 我做错了什么? Does auto-generating still require additional modifying or something? 自动生成是否还需要进行其他修改?

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 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 SearchActivity.class

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

Use Gson to convert Object to String and String to Object: Library : compile 'com.google.code.gson:gson:2.8.2' 使用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);

Replace your code with below code, 用下面的代码替换您的代码,

You need to cast your parcel object. 您需要投射包裹对象。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM