【发布时间】: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