在Android

时间:2016-07-25 16:16:21

标签: android ios objective-c sockets socket.io

我需要连接到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]+"");
    }
};

1 个答案:

答案 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格式的数据,那么只发送它。

  

最后,如何获取日志错误?

您需要使用combination of emitter and manager