好的,我的应用程序版本相同,代码结构没有任何变化。我下载了我的应用程序的当前市场版本,并序列化了一些数据并将其保存到数据库中。我可以在应用程序中重新打开它,没有问题。
问题是,当我构建应用程序的新版本、对其进行签名并升级应用程序时,在尝试反序列化时出现此异常:
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();
}