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