【发布时间】:2015-12-29 16:53:11
【问题描述】:
我在 Web 服务器上使用 Node.js 和 Socket.io。我的客户在 Android 应用程序上。我正在使用 Nkzawa 库进行聊天。但无法在两个客户端之间甚至在服务器端发送或接收。 请帮帮我。
客户端代码。
try {
socket = IO.socket("http://192.168.1.10:9090");
socket.connect(); // initiate connection to socket server
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
socket.emit("chat_message",chattext=chat_text.getText().toString());
adapter.add(new Data_Provider(position, chat_text.getText().toString()));
chattext=chat_text.getText().toString();
//position=!position;
chat_text.setText("");
}});
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
socket.emit("foo", "hi");
Log.d("1 socket connect", "successfuly really connected");
}
}).on("connection", new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d("socket connect", "successfuly connected to server");
}
}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.d("socket disconnect", "successfuly disconnected");
}
});
socket.on("chat_message", new Emitter.Listener() {
@Override
public void call(Object... arg0) {
// TODO Auto-generated method stub
String data = (String)arg0[0];
adapter.add(new Data_Provider(true, data));
chattext=data;
}
}).on(Socket.EVENT_ERROR, new Emitter.Listener() {
@Override
public void call(Object... args) {
Exception err = (Exception)args[0];
Log.d("err", ""+err);
}
});;
【问题讨论】:
-
请从 logcat 发布日志
-
D/friend id(1433): ---238916 I/connected(1433): to 192.168.1.10:7474/db/data/cypher I/sent query as(1433): {"query":"START n=node (238916) RETURN id(n),n.First_Name,n.Last_Name", "params":{}} I/Choreographer(1433):跳过 171 帧!应用程序可能在其主线程上做了太多工作。 D/1 套接字连接(1433):成功真正连接了聊天个人中的 D/朋友 ID(1433):{“columns”:[“id(n)”,“n.First_Name”,“n.Last_Name”],D /聊天个人中的朋友ID(1433):“数据”:[[238916,“Amit”,“Joshi”]] D /聊天个人中的朋友ID(1433):} 238916 Amit Joshi
-
插入数据后您没有调用 adapter.notifyDataSetChanged() 。作为一个好的做法,在 UI 线程中调用 add 方法。在您的示例中,它是在非 ui 线程中调用的。