使用套接字发送序列化的Android对象会引发InvalidClassException

时间:2014-12-01 18:22:49

标签: java android sockets path server

我试图制作一个在线绘图游戏。为此,我在Android中使用Path类,我需要将它发送到我的Java服务器。为此,我尝试扩展Path类,如下所示:

public class SerializedPath extends Path implements Serializable {
    private static final long serialVersionUID = -5974912367682897467L;
}

为了简化问题并缩小问题范围,我所做的只是使用outputStream.writeObject(new SerializedPath)和outputStream.flush()发送它,其中outputStream是ObjectOutputStream的一个实例。在服务器上,我只需使用inputStream.readObject()读取它,其中inputStream是ObjectInputStream的一个实例。我得到的例外是:

  

java.io.InvalidClassException:com.droplay.drawingonline.path.SerializedPath;无法创建实例       at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)       at java.io.ObjectInputStream.readObject0(Unknown Source)       at java.io.ObjectInputStream.readObject(Unknown Source)       在com.droplay.drawingonline.Session.run(Session.java:71)       在java.lang.Thread.run(未知来源)   引起:java.lang.reflect.InvocationTargetException       at sun.reflect.GeneratedSerializationConstructorAccessor1.newInstance(Unknown Source)       at java.lang.reflect.Constructor.newInstance(Unknown Source)       at java.io.ObjectStreamClass.newInstance(Unknown Source)       ......还有5个   引起:java.lang.RuntimeException:Stub!       在android.graphics.Path。(Path.java:24)       ......还有8个

现在,为了解决这个问题,我曾尝试创建一个没有任何成员但没有扩展任何成员的新类,但它确实有效。服务器没有抛出任何异常,它就像一个魅力。我确保包名称相同,类的名称相同,服务器使用与我的Android项目相同的SDK文件和文件' Android应用程序和Java服务器中的代码完全相同,但我一直得到这个例外。该应用程序不会抛出任何异常。它发送对象就好了。请问,我的代码有什么问题?谢谢你的帮忙! :)

1 个答案:

答案 0 :(得分:1)

我设法通过将每次点击的位置发送到服务器而不是路径类来解决它。但是为什么在我序列化它时它不起作用呢?