gpt4 book ai didi

java - Socket.io 连接不适用于多个 fragment

转载 作者:行者123 更新时间:2023-11-30 05:02:54 25 4
gpt4 key购买 nike

我正在使用 socket.io 创建一个项目。只要只有一个 fragment ,它就可以很好地工作。然而,当我在主要 Activity 中添加更多 fragment 时,它开始创建多个连接,我认为这不是一个好主意。

起初我直接从 fragment 连接到 socket.io,但那是为每个 fragment 创建一个连接。所以我在 Application 类中创建了一个连接并在 fragment 中使用它,这立即解决了多连接问题。但是现在出现了新的问题。

在互联网断开和重新连接的情况下, fragment 不会从 Application 类重新建立连接。我已经尝试了一个多星期但没有解决方案。奇怪的是,我在互联网和 stackoverflow 上进行了搜索,但从未有人问过这样的问题。

这是Application类中的连接代码

synchronized public Socket getSocket() {
if (mSocket == null) {
try {
IO.Options opts = new IO.Options();
opts.reconnection = true;
opts.reconnectionDelay = 1000;
mSocket = IO.socket("http://ddbharti.in", opts);

mSocket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d(TAG, "EVENT_CONNECT");
}

}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d(TAG, "EVENT_DISCONNECT");
}
}).on(Socket.EVENT_ERROR, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d(TAG, "error");
}
});
mSocket.connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}

return mSocket;
}

这就是每个 fragment 的连接方式

socket = application.getSocket();
socket.emit("tag", tag);

如果互联网工作正常,此设置将完美运行,加载时间为 300 毫秒。但是,当我断开/重新连接互联网或者我保持互联网断开连接并启动应用程序然后连接到互联网时。 Application 类中的连接可以快速连接,但由于某些原因,当前 fragment 中的连接无法获取。

如果我切换 fragment ,它会再次开始监听来自 Application 类的连接。

所以我在这里遗漏了什么吗?如果重新连接而不重新加载整个 fragment ,我如何强制 fragment 再次从应用程序类获取连接?

非常感谢任何帮助。

最佳答案

所以我创建了一个事件监听器来监听套接字连接状态并相应地显示 ui。只需与事件监听器建立连接即可。

关于java - Socket.io 连接不适用于多个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57916964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com