在Kotlin中通过Socket发送GregorianCalendar

时间:2018-03-27 08:30:30

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

我面临在用Kotlin语言编写的Android应用程序中通过Socket传递自定义序列化类的问题。至于我设法解决问题的是GregorianCalendar类,它在我的TakeKeyUserEvent类中传递。当我没有在班上传递GregorianCalendar对象时,问题不再存在。

客户端:

Set()

服务器:

let uniqColors = _.uniqBy(colorCollection, function (e) { return e.r + ' ' + e.g + ' ' + e.b; });

TakeKeyUserEvent类:

        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()

UserEvent类:

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)
            }
        }

错误:

    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
    }
}

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

1 个答案:

答案 0 :(得分:0)

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