Conectar la aplicación android a un servidor sockjs

Estoy trabajando en una aplicación androide nativa, tengo que conectar mi aplicación al servidor Sockjs. Intenté conectar con Socket.IO, Autobahn, WebSockets, pero su conexión no. ¿Hay algún cliente de sockjs para android? Por favor ayuda, gracias.

Socket.IO:

private void connectToSocket(String serverUrl, String accessKey) { IO.Options opts = new IO.Options(); opts.forceNew = true; opts.reconnection = true; //opts.query = "accessKey="+accessKey; String host = serverUrl; try { mSocket = IO.socket(host, opts); } catch (URISyntaxException e) { e.printStackTrace(); } mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError); mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError); mSocket.on(Socket.EVENT_CONNECT, onConnect); mSocket.on("new message", onNewMessage); mSocket.connect().emit("accessKey", accessKey); if (mSocket.connected()) { Log.d("SocketMsg: ", "Connected"); } } private Emitter.Listener onConnect = new Emitter.Listener() { @Override public void call(final Object... args) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Log.d("SocketMsg: ", args[0].toString()); //mSocket.emit("accessKey", accessKey); Toast.makeText(MainActivity.this.getApplicationContext(), "Connect", Toast.LENGTH_LONG).show(); for (Object o : args) { Log.i("IO " + Socket.EVENT_CONNECT_ERROR, o.toString()); } } }); } }; private Emitter.Listener onConnectError = new Emitter.Listener() { @Override public void call(final Object... args) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Log.d("SocketMsg: ", args[0].toString()); Toast.makeText(MainActivity.this.getApplicationContext(), "Error", Toast.LENGTH_LONG).show(); for (Object o : args) { Log.i("IO " + Socket.EVENT_CONNECT_ERROR, o.toString()); } } }); } }; 

Su "error de encuesta xhr"

Ahora conectado con éxito a SockJS usando el siguiente truco :).

 1. Place a web view and set its visibility to gone. 2. Use SockJS client in webview. 3. Create a javascript Interface that send data back to native code when get data from socket. 4. We have to call the function only once from native code. 

JavaScript Interace:

 public class WebAppInterface { Context mContext; /** * Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** * Show a toast from the web page */ @JavascriptInterface public void msg(final String toast) { Log.d("msg: ", toast); if (toast.contains("{")) createMarkerList(toast); } } 

SockJS Client en Webview:

 <script type="text/javascript"> function connectToSocket(url, accessKey){ Android.msg(String("called")); var sock = new SockJS("http://api.example.in:8182/realtime"); sock.onopen = function() { Android.msg("open"); sock.send(JSON.stringify({ key: accessKey })); }; sock.onclose = function() { Android.msg("close"); }; sock.onmessage = function(e) { result = e.data.replace(/,\s*$/, ''); Android.msg(String(result)); }; sock.onerror = function(e) { Android.msg("error"); }; } </script> 

Llamando a la función js:

 webView.loadUrl(javascript:connectToSocket(url, accessKey)); 

Le sugiero que use socket.io .

Hay una buena muestra para el cliente y el servidor en el blog Socket.io

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.