在现有代码中,我有以下类来保存类别详细信息。
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的新手。但是现有的类有一个叫做parcel的东西。现在我如何对位图做同样的事情呢?是不是像下面这样
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.
}请给我指引
发布于 2012-12-05 16:46:05
public void writeToParcel(Parcel dest, int flags) {
...
dest.writeValue(mImage);
}
private Category(Parcel in) {
...
mImage= in.readParcelable(Bitmap.class.getClassLoader());
}即使是mImage==null,这也是可行的。
发布于 2015-03-06 04:12:29
尝试简单的
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);只需根据您的需要更改'MyVeryOwnParcelable‘l就可以指出在哪些地方需要更改
希望这能帮助到一些人
发布于 2012-11-16 21:23:03
您有一个示例here。
mImage.writeToParcel(parcel, 0);https://stackoverflow.com/questions/13417163
复制相似问题