在现有代码中,我有以下类来保存类别详细信息。
import org.json.JSONObject;
import android.graphics.Bitmap;
import android.os.Parcel;
import android.os.Parcelable;
public class Category {
private String mIconURL;
private String mName;
public Category() {
super();
}
public String getIconURL() {
return mIconURL;
}
public void setIconURL(String iconURL) {
this.mIconURL = iconURL;
}
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(mIconURL);
dest.writeString(mName);
}
public static final Parcelable.Creator<Category> CREATOR = new Parcelable.Creator<Category>() {
public Category createFromParcel(Parcel in) {
return new Category(in);
}
public Category[] newArray(int size) {
return new Category[size];
}
};
private Category(Parcel in) {
super(in);
mIconURL = in.readString();
mName = in.readString();
}
@Override
public int describeContents() {
return 1;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("{");
builder.append(super.toString());
builder.append(", mName=").append(mName);
builder.append(", mIconURL=").append(mIconURL);
builder.append("}");
return builder.toString();
}
public static Category parseFromJSON(JSONObject jsonObject) {
Category cat = new Category();
try {
cat.setServerId(jsonObject.getInt("id"));
cat.setName(jsonObject.getString("name"));
cat.setIconURL(jsonObject.getString("icon"));
} catch (Exception e) {
}
return cat;
}
}
应用程序工作正常,但现在我想将Image属性添加到此类别类。我是Java和Android的新手。但现有的班级有一个叫做包裹的东西。现在我如何为位图做同样的事情?是下面的
public Bitmap getImage()
{
return mImage;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(mIconURL);
dest.writeString(mName);
dest.writeByteArray(mImage);// there is no "writeBitmap" method in Parcel.
}
请指导我
答案 0 :(得分:8)
public void writeToParcel(Parcel dest, int flags) {
...
dest.writeValue(mImage);
}
private Category(Parcel in) {
...
mImage= in.readParcelable(Bitmap.class.getClassLoader());
}
即使mImage==null
也适用。
答案 1 :(得分:1)
尝试简单
public class MyVeryOwnParcelable implements Parcelable {
//you can use every type of data even Arraylist
//change here (1)
public String ID;
public Bitmap BITMAP_IMAGE;
public MyVeryOwnParcelable () {
}
public MyVeryOwnParcelable (Parcel parcel) {
//change here (2)
this.ID= parcel.readString();
this.BITMAP_IMAGE=parcel.readParcelable(null);
}
@Override
public void writeToParcel(Parcel dest, int flags) {
//change here (3)
dest.writeString(ID);
dest.writeParcelable(BITMAP_IMAGE, flags);
}
@Override
public int describeContents() {
return 0;
}
// Method to recreate a Catch from a Parcel
public static Creator<MyVeryOwnParcelable > CREATOR = new Creator<MyVeryOwnParcelable >() {
@Override
public MyVeryOwnParcelable createFromParcel(Parcel source) {
return new MyVeryOwnParcelable (source);
}
@Override
public MyVeryOwnParcelable [] newArray(int size) {
return new MyVeryOwnParcelable [size];
}
};
}
简单发送
MyVeryOwnParcelable mp=new MyVeryOwnParcelable();
mp.ID="hello parcel";
mp.BITMAP_IMAGE=BitmapFactory.decodeResource(getResources(), R.drawable.myimage);
//put as normal
intent.putExtra("MY_DATA",mp);
//get from intent
MyVeryOwnParcelable my= (MyVeryOwnParcelable ) getIntent().getExtras().getParcelable(KEY.EXTRA_DATA);
//do anything with data
imageView.setImageBitmap(mp.BITMAP_IMAGE);
只需更改&#39; MyVeryOwnParcelable&#39;根据您的需要,我已经指出了需要改变的地方
希望这会有所帮助
答案 2 :(得分:0)
您有一个示例here。
mImage.writeToParcel(parcel, 0);