我已经通过自动插件生成了 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/