【问题标题】:Socket.io emit and listener functions not working on AndroidSocket.io 发出和侦听器函数在 Android 上不起作用
【发布时间】:2019-09-30 19:13:57
【问题描述】:

我正在尝试使用 Socket.IO 将我的 Android 客户端连接到 Node JS 服务器。连接成功,但我无法发出或收听任何数据更改。

这是我的 Android 代码...

 socket = IO.socket("http://192.168.0.101:3000");

            socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

                @Override
                public void call(Object... args) {
                    System.out.println("Connected");
                    socket.emit("message","test");
                }

            }).on("message", new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    System.out.println("Message : "+args[0]);
                }


            }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {

                @Override
                public void call(Object... args) {
                    System.out.println("Socket disconnected");
                }

            }).on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    System.out.println("Error In Socket Connection "+args[0]);
                }
            });
            socket.connect();

Socket 正在完美连接到服务器。我在日志中收到“已连接”消息。但是那个“消息”事件不起作用。我究竟做错了什么? ;_;

【问题讨论】:

标签: java android sockets socket.io


【解决方案1】:

你需要使用 OkHttp。将此添加到您的 Gradle 依赖项中:

implementation("com.squareup.okhttp3:okhttp:4.8.1")

然后将此作为字段添加到活动或片段类中:

private var socket: Socket? = null

那么这就是您获取套接字实例的方式,例如在活动或片段的onCreate() 方法中:

val okHttpClient: OkHttpClient = OkHttpClient.Builder().build()

IO.setDefaultOkHttpWebSocketFactory(okHttpClient)
IO.setDefaultOkHttpCallFactory(okHttpClient)

val opts = IO.Options()
opts.apply {
    callFactory = okHttpClient
    webSocketFactory = okHttpClient
}

socket = try {
    IO.socket("http://10.0.2.2:3000", opts)
} catch (e: URISyntaxException) {
    null
}

(此代码是用 kotlin 语言编写的)

那么一切都应该正常。

【讨论】:

  • @yogeshprajapati 实际上,我有一个使用此解决方案的工作示例,我还将尝试调查为什么使用 okhttp 会对我的代码产生任何影响。
猜你喜欢
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2017-09-27
  • 2017-07-07
  • 2023-03-23
  • 2014-12-19
相关资源
最近更新 更多