我需要连接到socket
并发送凭据信息才能开始通过 RECEIVE_CRISIS 接收即将发布的数据。
我正在使用库 Socket.IO 获取Android代码。这很难调试,因为我没有从连接中获取Log,我不知道它为什么以及它在哪里失败。自从我开始在Android方面工作以来,我从未收到任何来自服务器的内容。 NSDictionary
是否等同于Android上的JSONObject
? Android上sendEvent
相当于send()
或emit()
?我是否需要将JSON作为对象或数组发送?最后,如何获取日志错误?
它在iOS部分工作,所以我有点失落..
这是 iOS 代码:(为了安全起见,我修改了地址):
NSDictionary *params=@{@"user":_username,@"orgid":_organizationId};
[_socketIO connectToHost:@"nodejs.myserver.com" onPort:3000 ];
[_socketIO sendEvent:@"joinparty" withData:params];
这是 Android 代码:
private void connectAndListen(int username) throws Exception {
socket = IO.socket("nodejs.myserver.com:3000");
socket.connect();
JSONObject json = new JSONObject();
json.put("user", username);
json.put("orgid", settings.getString("orgid", ""));
Log.e(TAG, json.toString());
socket.send("joinparty",json);
socket.emit("joinparty", json);
socket.on(RECEIVE_CRISIS, onCrisis);
}
更新的问题
private void connectAndListen(int id) throws Exception {
IO.setDefaultSSLContext(SSLContext.getDefault());
// Set default hostname
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
return true;
}
};
IO.setDefaultHostnameVerifier(hostnameVerifier);
IO.Options options = new IO.Options();
// set as an option
options.sslContext = SSLContext.getDefault();
options.hostnameVerifier = hostnameVerifier;
options.secure = true;
socket = IO.socket("nodejs.myserver.com:3000", options);
socket.connect();
JSONObject json = new JSONObject();
json.put("user", id);
json.put("orgid", settings.getString("orgid", ""));
Map<Object, Object> arrays = new HashMap<>();
arrays.put("user", id);
arrays.put("orgid",settings.getString("orgid", "") );
socket.emit("joinparty", arrays);
socket.on(RECEIVE_CRISIS, onCallback);
socket.on("connect_error", onCallback);
socket.on("connect", onCallback);
socket.on("Object", onCallback);
socket.on("connect_timeout", onCallback);
}
private Emitter.Listener onCallback = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.e(TAG, args[0]+"");
}
};
答案 0 :(得分:1)
NSDictionary是否等同于Android上的JSONObject?
不,不是。 NSDictionary是class cluster,意味着API用户隐藏了实际的实现。实际上,Foundation
框架将根据数据量等在运行时选择适当的实现。与Java最接近的是Map<Object, Object>
sendEvent是否等同于Android上的send()或emit()?
它是Android的发射器。 from official documentation
我是否需要将JSON作为对象或数组发送?
尝试发送Map
。 JSON是另一回事。如果您的服务器期望JSON格式的数据,那么只发送它。
最后,如何获取日志错误?