【问题标题】:Sending a serialized Android object using sockets throws an InvalidClassException使用套接字发送序列化的 Android 对象会引发 InvalidClassException
【发布时间】:2015-01-29 19:59:01
【问题描述】:

我正在尝试制作一个在线绘图游戏。为此,我在 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;无法创建实例 在 java.io.ObjectInputStream.readOrdinaryObject(未知来源) 在 java.io.ObjectInputStream.readObject0(未知来源) 在 java.io.ObjectInputStream.readObject(未知来源) 在 com.droplay.drawingonline.Session.run(Session.java:71) 在 java.lang.Thread.run(未知来源) 引起:java.lang.reflect.InvocationTargetException 在 sun.reflect.GeneratedSerializationConstructorAccessor1.newInstance(未知来源) 在 java.lang.reflect.Constructor.newInstance(未知来源) 在 java.io.ObjectStreamClass.newInstance(未知来源) ... 5 更多 引起:java.lang.RuntimeException:存根! 在 android.graphics.Path.(Path.java:24) ... 8 更多

现在,为了隔离问题,我尝试创建一个没有任何成员且不扩展任何内容的新类,它确实有效。服务器没有抛出任何异常,它就像一个魅力。我确保包名称相同,类名称相同,服务器使用与我的 Android 项目相同的 SDK 文件,并且 Android 应用程序和 Java 服务器中的文件代码完全相同,但是我不断收到这个异常。该应用程序不会引发任何异常。它发送对象就好了。请问,我的代码有什么问题?感谢您的帮助! :)

【问题讨论】:

    标签: java android sockets path server


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 2011-05-14
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      相关资源
      最近更新 更多