2017-06-02 60 views
0

我有一个使用NodeJS,Socket.IO和Express开发的服务器。我开发了一个网站来处理这个服务器,并且一切正常。当我尝试开发一个android应用程序时,麻烦来了。使用Socket.Io Listeners获得循环

我在socket.io上有一个方法,它返回一个对象数组。在代码中是这样的:

socket.on("getData",function(data){ 
if(data!=null){ 
io.sockets.connected.emit("getSocData", {result:true}); 
} 
} 

在客户端,在js中,哪里工作正常。

socket.on("getSocData", function (data) { 
if(data){alert("good"); } 
} 

麻烦的是当我调试Android应用程序,其中的代码是:

mSocket.on("getSocData", new Emitter.Listener() { 
    @Override 
    public void call(final Object.. args) { 
     getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       JSONObject data = (JSONObject) args[0]; 
      } 
     }); 
    } 
}); 

当调试与我的手机Android的代码,开始循环运行方式的20倍以上,虽然mSocket.on只触发一次。

我越来越疯狂,因为在网站工作正常,但在Android冻结应用程序,直到运行方法停止。

,我使用的关系是不是:

compile ('io.socket:socket.io-client:0.8.3') { 
    exclude group: 'org.json', module: 'json' 
} 

THX 4所有的家伙!

回答

1

组事件侦听器之前您套接字调用off()方法,以便清除所有连接的事件:

mSocket.off() 
mSocket.on("getSocData", new Emitter.Listener() { 
    @Override 
    public void call(final Object.. args) { 
     getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       JSONObject data = (JSONObject) args[0]; 
      } 
     }); 
    } 
}); 
+0

就像一个魅力!我认为Android和网站中的客户端工作原理类似。 – kartGIS