Java 解封自定义类时发生ClassNotFoundException

Java 解封自定义类时发生ClassNotFoundException,java,android,classnotfoundexception,Java,Android,Classnotfoundexception,在解组自定义类时,我遇到了一个奇怪的ClassNotFoundException。这种情况发生在 this.moon=in.readParcelable(moon.class.getClassLoader()) 奇怪的是,这种情况只发生在某些设备上,如三星和HTC。任何帮助都将不胜感激。多谢各位 下面是我的代码片段 @Override public int describeContents() { return 0; } @Override public void writeToPar

在解组自定义类时,我遇到了一个奇怪的ClassNotFoundException。这种情况发生在 this.moon=in.readParcelable(moon.class.getClassLoader())

奇怪的是,这种情况只发生在某些设备上,如三星和HTC。任何帮助都将不胜感激。多谢各位

下面是我的代码片段

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    super.writeToParcel(dest, flags);
    dest.writeParcelable(this.warnings, flags);
    dest.writeTypedList(this.conditions);
    dest.writeParcelable(this.districtForecasts, flags);
    dest.writeParcelable(this.localForecasts, flags);
    dest.writeParcelable(this.partDayForecasts, flags);
    dest.writeParcelable(this.dailyExtremes, flags);
    dest.writeParcelable(this.dailyObservations, flags);
    dest.writeTypedList(this.historicalObservations);
    dest.writeTypedList(this.images);
    dest.writeParcelable(this.forecastRainDates, flags);
    dest.writeParcelable(this.wavesModel,flags);
    dest.writeParcelable(this.tides, flags);
    dest.writeTypedList(this.scripts);
    dest.writeParcelable(this.animator, flags);
    dest.writeParcelable(this.almanac, flags);
    dest.writeParcelable(this.marineForecast, flags);
    dest.writeParcelable(this.moon, flags);
    dest.writeString(this.tag);
    dest.writeParcelable(this.snow,flags);
}

protected LocalWeather(Parcel in) {
    super(in);
    this.warnings = in.readParcelable(Warnings.class.getClassLoader());
    this.conditions = in.createTypedArrayList(Condition.CREATOR);
    this.districtForecasts = in.readParcelable(DistrictForecasts.class.getClassLoader());
    this.localForecasts = in.readParcelable(LocalForecasts.class.getClassLoader());
    this.partDayForecasts = in.readParcelable(PartDayForecasts.class.getClassLoader());
    this.dailyExtremes = in.readParcelable(DailyExtremes.class.getClassLoader());
    this.dailyObservations = in.readParcelable(DailyObservations.class.getClassLoader());
    this.historicalObservations = in.createTypedArrayList(Condition.CREATOR);
    this.images = in.createTypedArrayList(Images.CREATOR);
    this.forecastRainDates = in.readParcelable(RainForecasts.class.getClassLoader());
    this.wavesModel = in.readParcelable(Waves.class.getClassLoader());
    this.tides = in.readParcelable(Tides.class.getClassLoader());
    this.scripts = in.createTypedArrayList(Script.CREATOR);
    this.animator = in.readParcelable(Animator.class.getClassLoader());
    this.almanac = in.readParcelable(Almanac.class.getClassLoader());
    this.marineForecast = in.readParcelable(MarineForecast.class.getClassLoader());
    this.moon =  in.readParcelable(Moon.class.getClassLoader());
    this.tag = in.readString();
    this.snow = in.readParcelable(Snow.class.getClassLoader());
}
我的月亮课在下面

public class Moon implements Parcelable {
List<MoonPhase> phases = new ArrayList<>();

public List<MoonPhase> getPhases() {
    return phases;
}

public void setPhases(List<MoonPhase> phases) {
    this.phases = phases;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeTypedList(this.phases);
}

public Moon() {
}

protected Moon(Parcel in) {
    this.phases = in.createTypedArrayList(MoonPhase.CREATOR);
}

public static final Parcelable.Creator<Moon> CREATOR = new Parcelable.Creator<Moon>() {
    @Override
    public Moon createFromParcel(Parcel source) {
        return new Moon(source);
    }

    @Override
    public Moon[] newArray(int size) {
        return new Moon[size];
    }
};

public MoonPhase getNextPhase() {
    if (phases != null && phases.size() > 0) {
        return phases.get(0);
    } else {
        return null;
    }
}
public类Moon实现可包裹{
列表阶段=新建ArrayList();
公共列表getPhases(){
返回阶段;
}
公共无效设置阶段(列表阶段){
这个阶段=阶段;
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
dest.writeTypedList(本阶段);
}
公众月亮(){
}
受保护的月亮(包裹内){
this.phases=in.createTypedArrayList(MoonPhase.CREATOR);
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
public Moon createFromParcel(地块源){
返回新月(来源);
}
@凌驾
公共阵列(整数大小){
返回新月[大小];
}
};
public MoonPhase getNextPhase(){
if(phases!=null&&phases.size()>0){
返回阶段。获取(0);
}否则{
返回null;
}
}

}

对于列表,您应使用以下方式:

@Override
public void writeToParcel(Parcel dest, int flags) {
   dest.writeList(this.phases);
}

protected Moon(Parcel in) {
    this.phases = new ArrayList<>();
    in.readList(this.phases , MoonPhase.class.getClassLoader());
}  
@覆盖
公共无效写入包裹(包裹目的地,内部标志){
目的写入列表(本阶段);
}
受保护的月亮(包裹内){
this.phases=新的ArrayList();
in.readList(this.phases,MoonPhase.class.getClassLoader());
}  
重点是使用
writeList
而不是
writeTypedList


对于列表,您应使用以下方式:

@Override
public void writeToParcel(Parcel dest, int flags) {
   dest.writeList(this.phases);
}

protected Moon(Parcel in) {
    this.phases = new ArrayList<>();
    in.readList(this.phases , MoonPhase.class.getClassLoader());
}  
@覆盖
公共无效写入包裹(包裹目的地,内部标志){
目的写入列表(本阶段);
}
受保护的月亮(包裹内){
this.phases=新的ArrayList();
in.readList(this.phases,MoonPhase.class.getClassLoader());
}  
重点是使用
writeList
而不是
writeTypedList


您是否仍有问题或问题已得到解决?谢谢@Smartiz。我已经加入了你的解决方案,并将与几个用户一起测试该应用程序。我希望这个问题已经解决。将很快报告。可能是的副本。您是否仍有问题或问题已得到解决?谢谢@Smartiz。我已经加入了你的解决方案,并将与几个用户一起测试该应用程序。我希望这个问题已经解决。我马上就要报告了,谢谢。我试试这个。它发生在随机的手机上,因此我无法复制它:(我试过了,它又崩溃了:(.现在的例外是java.lang.RuntimeException:Parcel android.os。Parcel@889952f:在偏移量86816处解组未知类型代码6881357您也可以发布您的MoonPhase类吗?@VarunThank you.我将尝试此操作。此操作发生在随机电话上,因此我无法复制它:(我尝试过,它再次崩溃:(.现在的例外是java.lang.RuntimeException:Parcel android.os。Parcel@889952f:在偏移量86816处解组未知类型代码6881357您是否也可以发布您的MoonPhase类?@Varun