【问题标题】:Android socket doesn't listen to some Socket.io emitsAndroid 套接字不听某些 Socket.io 发出的信号
【发布时间】:2018-10-25 21:42:03
【问题描述】:

我正在使用 Socket.io 构建一个 Android(和网络)聊天应用程序。 当我 io.emit 一些 纯字符串 数据时,Android 会监听它,但当我发出一些修改过的字符串(如 SOME_CONST_STRING + msg)时它不会。

server.js

const SYS = '[알림]';
...
io.on('connection', (socket) => {
    socket.on('join', (name) => {
        names[socket.id] = name;
        let data = {"name": SYS,
                    "message": CONNECTED_MESSAGE_WITH + name,
                    "color": SYS_COLOR};
        io.emit('chat message', data);
        var msg = data["message"];
        io.emit('toast join', msg);
    });
    ...
}

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
...
mSocket.on("toast join", new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                String msg = (String) args[0];
                Log.d(LOG_TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });
    }
});

对于toast join,当我发出name(而不是msg)时,它会起作用。

有什么区别,是哪一方造成了问题?

【问题讨论】:

  • 如果您的服务器发出一个对象,例如msg,那么客户端将接收args[0] 作为JSONObject,而不是String。 IOW,我认为您的Runnable 是由于第一行的类转换异常而引发的。调试器是你的朋友!

标签: javascript android socket.io


【解决方案1】:

尝试如下:

 let testString = CONNECTED_MESSAGE_WITH + name;
 let data = {"name": SYS,
             "message": testString,
             "color": SYS_COLOR};

调试并查看 testString 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多