![](/img/trans.png)
[英]Getting null object after passing it via Intent. My object class implements Parcelable interface.
[英]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.