【问题标题】:Sending GregorianCalendar by Socket in Kotlin在 Kotlin 中通过 Socket 发送 GregorianCalendar
【发布时间】:2018-03-27 08:30:30
【问题描述】:

在我用 Kotlin 语言编写的 Android 应用程序中,我遇到了通过 Socket 传递自定义序列化类的问题。据我设法解决的问题是在我的 TakeKeyUserEvent 类中传递的 GregorianCalendar 类中。当我不在课堂上传递 GregorianCalendar 对象时,问题不再存在。

客户:

        val event = TakeKeyUserEvnet(u,r,date)
        val s: Socket = Socket(IP,PORT)
        val out: ObjectOutputStream = ObjectOutputStream(s.getOutputStream())
        out.writeObject(event)
        out.flush()
        out.close()

服务器:

thread(start = true) {
            val ss: ServerSocket = ServerSocket(PORT)

            while(true){
                clientSocket = ss.accept()

                val input = ObjectInputStream(clientSocket.getInputStream())

                val event: UserEvent = input.readObject() as UserEvent //error happens here

                readMessage(event)
            }
        }

TakeKeyUserEvent 类:

    class TakeKeyUserEvent(val user: User, val room: Room, val date: GregorianCalendar): UserEvent() { //Works perfectly without GregorianCalendar class
    companion object {
        @JvmStatic private val serialVersionUID: Long = 7571062817744602394L
    }
}

UserEvent 类:

    abstract class UserEvent: Serializable {
    companion object {
        @JvmStatic
        private val serialVersionUID: Long = 7571062817744602394L
    }
}

错误:

java.io.InvalidClassException: libcore.util.ZoneInfo; Incompatible class (SUID): libcore.util.ZoneInfo: static final long serialVersionUID =-4598738130123921552L; but expected libcore.util.ZoneInfo: static final long serialVersionUID =5684813000093210627L;

我尝试创建自己的 GregorianCalendar 类,该类继承自原始类并设置我的 serialVersionUID,但它没有帮助。我会感谢任何帮助。

【问题讨论】:

    标签: java android kotlin client-server gregorian-calendar


    【解决方案1】:

    我设法通过以毫秒为单位传递时间(作为 Long 值)然后将其更改为 GregorianCalendar 对象来解决这个问题。它现在完美地工作。我知道这是一种解决方法,所以如果您有更好的解决方案,请与他人分享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 2020-03-15
      相关资源
      最近更新 更多