首页 > 解决方案 > Socket.io - 如何以与 JS 代码相同的方式发出 Kotlin 对象?

问题描述

我想将实现从在 Socket.io 上运行的 react 应用程序转移到我的 Android 应用程序。但是,我无法从 Kotlin 代码中得到相同的结果。我无权访问服务器端代码,因此我需要映射在 React 端运行的代码。

这是来自反应应用程序的工作代码

socket.emit('message', {type: 'image', photo: 'some base64 code'});

这是我想在服务器端获得相同结果的 Kotlin 代码

data class Data(var type: String, var photo: String)
socket?.emit("message", Data("image", "some base64 code"))

套接字配置正确,两个平台上所有发送的值都相同,但 Kotlin 代码在服务器端没有给出任何结果。如何在 Android 端获得相同的“发射”方法调用?

编辑

我想自己序列化 JS 对象并通过 Socket.io 发出它,但它在服务器端也不起作用。唯一有效的方法是将 JS 对象传递给 emit 方法。

var data = {type: 'image', photo: 'some base64 code'};
var json = JSON.stringify(data);
socket.emit('message', json);

标签: javascriptandroidkotlinsocket.io

解决方案


toString问题是,当在它的实例上调用时,使用数据类不会将其数据转换为 JSON 格式。您需要手动执行此操作。您可以为此使用 gson 库。

在您的 app/build.gradle 文件中,添加 gson 依赖项:

dependencies {
  implementation 'com.google.code.gson:gson:2.8.5'
}

您的套接字发出调用:

val data = Data("image", "some base64 code")
socket?.emit("message", Gson().toJson(data))

推荐阅读