2017-06-02 71 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