2

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

问题是,当我构建应用程序的新版本、对其进行签名并升级应用程序时,在尝试反序列化时出现此异常:

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

org.MyApp.hd 实际上是 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();
}
4

0 回答 0