簡體   English   中英

解組錯誤時找不到類。 可與byteArray,byte []一起打包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM