Android反序列化异常

时间:2012-10-28 18:28:37

标签: android serialization deserialization illegalargumentexception

好的,我的应用程序版本相同,没有任何代码结构发生变化。我下载了我的应用程序的当前市场版本,我序列化了一些数据并将其保存到数据库中。我可以在应用程序中重新打开它没问题。

问题是,当我构建我的应用程序的新版本,签名并升级我的应用程序时,我在尝试反序列化时遇到此异常:

java.lang.IllegalArgumentException: expected receiver of type java.util.ArrayList, but got org.myApp.h.d

org.MyApp.h.d是actully org.MyApp.SingleFrame:

public final class SingleFrame implements Serializable
{
    private static final long serialVersionUID = 1L;
    public int Position;
    public int FrameNumber;
    public String TimeStamp;
    public Map<Integer,String> MainDataMap;
    public Map<Integer,String> DataMap;

    public SingleFrame()
    {
    }
}

这是它的父类(被序列化和反序列化的类,只是SingleFrame的集合):

public class DataLog extends ArrayList<SingleFrame> implements Serializable
{   
    private static final long serialVersionUID = 1L;

    public DataLog ()
    {

    }
}

如果我调试应用程序一切都很好。问题是当我构建版本,保存一些数据,然后构建新版本...更新应用程序,然后尝试打开(反序列化)旧的已保存数据。

这是我的proguard配置:

-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

0 个答案:

没有答案