[英]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.