我有以下Recipe
类,它正在实现Parcelable
类。但是当我将对象从一个类传递给另一个类时,其属性的值为null
。为什么呢?
食谱类:
package mobile.bh.classes;
import java.util.ArrayList;
import mobile.bh.activities.MethodStep;
import android.graphics.Bitmap;
import android.os.Parcel;
import android.os.Parcelable;
//simple class that just has one member property as an example
public class Recipe implements Parcelable {
public int id;
public String name;
public ArrayList<Ingredient> ingredients;
public ArrayList<MethodStep> method;
public String comment;
public String image;
public Bitmap image2;
public Recipe(){}
/* everything below here is for implementing Parcelable */
// 99.9% of the time you can just ignore this
public int describeContents() {
return 0;
}
// write your object's data to the passed-in Parcel
public void writeToParcel(Parcel out, int flags) {
out.writeInt(id);
out.writeString(name);
out.writeList(ingredients);
out.writeList(method);
out.writeString(comment);
out.writeString(image);
}
// this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
public static final Parcelable.Creator<Recipe> CREATOR = new Parcelable.Creator<Recipe>() {
public Recipe createFromParcel(Parcel in) {
return new Recipe(in);
}
public Recipe[] newArray(int size) {
return new Recipe[size];
}
};
// example constructor that takes a Parcel and gives you an object populated with it's values
private Recipe(Parcel in) {
in.writeInt(id);
in.writeString(name);
in.writeList(ingredients);
in.writeList(method);
in.writeString(comment);
in.writeString(image);
}
}
通过intent
Intent i = new Intent(context,RecipeInfoActivity.class);
i.putExtra("recipeObj", recipe);
接收另一方的对象
Recipe p = (Recipe) getIntent().getParcelableExtra("recipeObj");
但p.name
的值为null
答案 0 :(得分:1)
在Parcelable Constructor中,您需要从包裹中回读。
private Recipe(Parcel in) {
id = in.readInt();
name =in.readString();
ingredients = in.readList();
method = in.readList();
comment = in.readString();
}
答案 1 :(得分:0)
您应该在构造函数中使用readInt而不是writeInt(其他字段使用etc)
答案 2 :(得分:0)
首先,在您的构造函数中,您似乎试图将所有属性写入包裹,但据我所知,它们尚未设置;可能你打算从那里读包裹?现在我不确定这个包究竟是什么,但我在想它的类似属性的类?如果是这样,Java不是通过引用传递的。意思是只修改传递给您方法的值不会修改实际包裹的值,您必须返回修改后的包裹