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

标签 java android android-intent

我已经通过自动插件生成了 Parcelable 类,所以我真的不能认为 CustomUser 类代码中存在错误,但是,无论我如何在 Intent 中传递它并尝试接收它,我仍然得到空值。 我做错了什么? 自动生成还需要额外修改什么的吗?

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将对象转换为字符串,字符串转换为对象: 库:编译“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);

关于java - 通过intent(Parcelable)传递自定义对象返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48496466/

相关文章:

java - 使用运行配置从 eclipse 中的文件重定向标准输入

android - 如何为 Android 编写自己的 LocationService?

android - 发布其他人可以轻松导入的android库如何工作?

java - 如何在 Android Studio 中通过 Intent 共享 GIF

android - codename one android拦截urls问题

java - 安卓 : Getting "null" from intent

java - JBI 和 SCA 之间有何区别/相似之处

java - 无法执行 JPA 架构生成创建命令

Java:由子字符串生成的字符串不被视为硬编码字符串

java - 读取已拆分为两个文件的 Java 序列化对象?