Android Nkzawa SocketIO断开连接并建立新连接

时间:2015-02-27 19:50:41

标签: android socket.io

我正在使用android,socketio(nkzawa)。当我第一次连接时工作完美。但是如果我断开连接并尝试进行“另一个连接”,则永远不会调用EVENT_CONNECT。

我在这里放了一些片段

连接时

InsideActivity内部

@Override
public void onResume() {
    super.onResume();   
    socketManager = (socketManager) socketManager.Instance(this, UrlHelper.URL.replaceAll("\\{userId\\}", userId.toString());
}

然后我有从SnericSocket扩展的类SocketManager,其中我有一个单例的变量(SocketManager)实例

public static SocketManager Instance(SocketListener listener, String url) {

  if (instance == null) {
    instance = new socketManager(url);
    instance.init();
  }

  socketManager.listener = (listener)listener;

  return instance;
}

并且套接字的初始化是在类GenericSocket中完成的,其中我有一个类型的变量(com.github.nkzawa.socketio.client.Socket)tcalled socket

protected void init() {
    try {
        socket = IO.socket(url);
        socket
        .on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT, new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                onConnect();
                JSONObject connectionMessage = getConnectionMessage();
                socket.emit(MESSAGE_JOIN, connectionMessage);
            }

        }).on(MESSAGE, new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                Object data = args[0];
                if (data instanceof JSONObject) {
                    JSONObject json = (JSONObject) data;
                    try {
                        onMessage(json.get("content").toString());
                    } catch (Exception ex) {
                        Log.e(TAG, ex.getMessage());
                    }
                } else {
                    onMessage(data.toString());
                }

            }
        }).on(Constant.CONNECTION, new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                Object data = args[0];
                if (data instanceof JSONObject) {
                    JSONObject json = (JSONObject) data;
                    try {
                        onMessage(json.get("content").toString());
                    }
                    catch(Exception ex) {
                        Log.e(TAG, ex.getMessage());
                    }
                } else {
                    onMessage(data.toString());
                }

            }
        }).on(com.github.nkzawa.socketio.client.Socket.EVENT_DISCONNECT, new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                onDisconnect();
            }
        });
        socket.connect();
    }catch (Exception e){
        Log.i("Socket connection error: ", e.getMessage());
    }
    //end socket connection
}

当我断开连接时

断开连接就像在SocketManager类中我有这个方法

public void disconnect() {
  this.socket.disconnect();
  this.socket=null;
  SocketManager.instance = null;
}

谢谢

1 个答案:

答案 0 :(得分:5)

您的代码看起来很好。尝试在socket.disconnect()之前放置this.socket.off()。我遇到了一个问题,即使在disconnect(),socket.off()为我工作之后,服务器仍保持连接活动。