Vis*_*Raj 4 sockets android sockjs
我正在使用本机Android应用程序,我必须将我的应用程序连接到Sockjs服务器.我试图连接Socket.IO,Autobahn,WebSockets,但它没有连接.android有什么sockjs客户端吗?请帮忙,谢谢.
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());
}
}
});
}
};
Run Code Online (Sandbox Code Playgroud)
它给'xhr民意调查错误'
现在使用以下技巧成功连接到SockJS :).
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.
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
Webview上的SockJS客户端:
<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>
Run Code Online (Sandbox Code Playgroud)
调用js函数:
webView.loadUrl(javascript:connectToSocket(url, accessKey));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |