javascript - 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);
解决方案
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))
推荐阅读
- python - 如何在 python 中的 Requests.PUT 中传递正文参数?
- jenkins - Jenkins 插件,用于进行 REST 调用并以 JSON 格式获取输出
- jquery - 在浮动元素中添加字段时,jQueryUI datepicker 1.12.1 和 jQuery 3.5.1 位置错误
- selenium - 我可以使用带参数的黄瓜钩吗
- laravel - OctoberCMS (Laravel) 字段选择语句
- kubernetes - Ingress Controller 和 Ingress 如何协同工作?
- python - 有谁知道在python中评估公式维度的更好方法?
- sql-server - 如何在 TSQL 中获取子字符串
- google-cloud-platform - 属性“notification_channels”的值不合适:元素 0:字符串
- rabbitmq - 具有持久特性的 RabbitMQ HA