![](/img/trans.png)
[英]Parcelable:Class not found when unmarshalling error, on Rotation of my fragments
[英]Class not found when unmarshalling error. Parcelable with byteArray, byte[]
使用Parcelable類時出現錯誤。 我正在嘗試在活動之間將圖像作為ByteArray傳遞,並最終傳遞給遠程Web服務。
java.lang.ClassNotFoundException:...拆組時找不到類:
import java.util.UUID;
public class Property implements Parcelable {
@SerializedName("id")
@NonNull
private final String mId;
protected byte[] mImage;
public byte[] getmImage() { return mImage; }
public void setmImage(byte[] image){ mImage = image; }
@SerializedName("generalInformation")
private GeneralInformation mGeneralInformation;
@NonNull
public GeneralInformation getGeneralInformation() {
return mGeneralInformation;
}
public void setGeneralInformation(@NonNull final GeneralInformation generalInformation) {
mGeneralInformation = generalInformation;
}
@NonNull
public String getId() {
return mId;
}
@Override
public boolean equals(final Object o) {
return (o instanceof Property) && ((Property) o).mId.equals(mId);
}
@Override
public int hashCode() {
return mId.hashCode();
}
public static Property create() {
final Property model = new Property(UUID.randomUUID().toString());
model.setGeneralInformation(new GeneralInformation());
return model;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull final Parcel dest, final int flags) {
if(mImage != null) {
dest.writeInt(mImage.length);
dest.writeByteArray(mImage);
}
dest.writeString(mId);
dest.writeParcelable(mGeneralInformation, 0);
}
private Property(@NonNull final String id) {
mId = id;
}
protected Property(final Parcel in) {
if(mImage != null)
{
mImage = new byte[in.readInt()];
in.createByteArray();
}
mId = in.readString();
mGeneralInformation = in.readParcelable(GeneralInformation.class.getClassLoader());
}
public static final Parcelable.Creator<Property> CREATOR = new Parcelable.Creator<Property>() {
public Property createFromParcel(@NonNull final Parcel source) {
return new Property(source);
}
@NonNull
public Property[] newArray(final int size) {
return new Property[size];
}
};
}
現在,我對本課程所遇到的問題的了解非常有限。 讀取包裹時,mImage為null。 (即使我確定將byteArray分配給Parcel時,byteArray也不為空。)我嘗試在其聲明中初始化mImage,因此它不為null,但是在解組錯誤時找不到Class ...
我幾乎可以確定問題出在
protected Property(final Parcel in) {
if(mImage != null)
{
mImage = new byte[in.readInt()];
in.createByteArray();
}
但是我不知道如何解決。
我迷失了兩天:/
請參閱下面的代碼,了解帶有Parcel對象的構造函數。
protected Property(final Parcel in) {
mImage = new byte[in.readInt()];
in.readByteArray(mImage); // this will read the byte array from Parcel object(in) and store the value in mImage member variable.
mId = in.readString();
mGeneralInformation = in.readParcelable(GeneralInformation.class.getClassLoader());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.