首页 > 解决方案 > java.lang.RuntimeException:Parcelable 在读取 Serializable 对象时遇到 IOException

问题描述

我尝试在活动之间发送以下对象

public class SerializablePlusCourtChemin implements Serializable {

    public static final String FROM = "From";
    public static final String TO = "Ro";
    public static final String BY= "By";

    private List<SerializableSalle> mSalles = new ArrayList<SerializableSalle>();
    private List<SerializableMouvement> mMouvements = new ArrayList<SerializableMouvement>();

    public List<SerializableSalle> getmSalles() {
        return mSalles;
    }

    public void setmSalles(List<SerializableSalle> mSalles) {
        this.mSalles = mSalles;
    }

    public List<SerializableMouvement> getmMouvements() {
        return mMouvements;
    }

    public void setmMouvements(List<SerializableMouvement> mMouvements) {
        this.mMouvements = mMouvements;
    }

}

我得到标题中提到的异常堆栈跟踪是

RuntimeException: Parcelable encountered IOException reading a Serializable object (name = fr.cnam.nfa024.jpmena.geolocalisationindoor.bean.SerializablePlusCourtChemin)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.RuntimeException: Parcelable encountered IOException reading a Serializable object (name = fr.cnam.nfa024.jpmena.geolocalisationindoor.bean.SerializablePlusCourtChemin)
        at android.os.Parcel.readSerializable(Parcel.java:2215)
        at android.os.Parcel.readValue(Parcel.java:2064)
        at android.os.Parcel.readArrayMapInternal(Parcel.java:2314)
        at android.os.Bundle.unparcel(Bundle.java:249)
        at android.os.Bundle.getSerializable(Bundle.java:1295)
        at fr.cnam.nfa024.jpmena.geolocalisationindoor.ViewCourseActivity.onCreate(ViewCourseActivity.java:35)
.............................................
Caused by: java.io.InvalidClassException: fr.cnam.nfa024.jpmena.geolocalisationindoor.bean.SerializableSalle;
Incompatible class (SUID): fr.cnam.nfa024.jpmena.geolocalisationindoor.bean.SerializableSalle: static
final long serialVersionUID =2285590632111183141L; but expected
fr.cnam.nfa024.jpmena.geolocalisationindoor.bean.SerializableSalle: static
final long serialVersionUID =-5659168454258435009L;

在将布尔值添加到 SerializableSalle之前,我没有任何问题。我刚刚添加了对SerializableSalle的可访问性,这使得:

public class SerializableSalle implements Serializable {

    private String name;

    private Integer identifiant;

    private Boolean accessible; //La salle est elle ouverte oou bien en travaux ?

    public SerializableSalle(Integer id, String name, Boolean accessible) {
        this.name = name;
        this.identifiant = id;
        this.accessible = accessible;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getIdentifiant() {
        return identifiant;
    }

    public void setIdentifiant(Integer identifiant) {
        this.identifiant = identifiant;
    }

    public Boolean getAccessible() {
        return accessible;
    }

    public void setAccessible(Boolean accessible) {
        this.accessible = accessible;
    }
}

(法语 Salle 是房间的意思)

标签: javaandroidserialization

解决方案


推荐阅读