【发布时间】:2016-05-15 21:57:07
【问题描述】:
您好,我正在尝试为 Android 开发一个简单的聊天,我用作 Node.js 服务器,我使用的套接字库是 compile 'com.github.nkzawa:socket.io-client:0.4.0'
到目前为止,我已经设法建立连接并运行事件以发出和侦听事件,但是我遇到了问题,不是因为当您运行事件侦听器的方法之一并尝试修改消息所在片段的接口时显示应用程序停止并退出。
事件监听器新帖
socket.on(EVENT_SEND_GET_MESSAGE, new Emitter.Listener(){
@Override
public void call(Object... args) {
JSONObject Mensaje = (JSONObject) args[0];
if ( !Mensaje.equals("") && CONTENTCHAT != null ){
try {
if( Mensaje.getString("Remitente").equals("7") ){
CONTENTCHAT.addView( GenerarTextView(0, Mensaje.getString("Mensaje") ) );
}else{
CONTENTCHAT.addView( GenerarTextView(1, Mensaje.getString("Mensaje") ) );
}
Log.i("RESPONSE", Mensaje.getString("Mensaje"));
} catch (JSONException e) {
e.printStackTrace();
}
//Log.i("RESPONSE", args[0].toString());
}
}
});
如果我注释以下代码并且只发送一个日志,它运行顺利。
CONTENTCHAT.addView( GenerarTextView(1, Mensaje.getString("Mensaje") ) );
GenearTextView 函数
private TextView GenerarTextView(int origen, String mensaje){//generar textview
TextView texto = new TextView(CONTEXTO);
if( origen == 0){
texto.setBackgroundResource(R.color.accent_transparency_remitente);
texto.setGravity(Gravity.LEFT);
}else{
texto.setBackgroundResource(R.color.accent_transparency_receptor);
texto.setGravity(Gravity.RIGHT);
}
texto.setTextColor(CONTEXTO.getResources().getColor(R.color.textBlack));
texto.setPadding(30, 5, 30, 5);
texto.setTextSize(15);
texto.setText(mensaje);
return texto;
}
我知道生成TextViews时不会出错,因为如果我添加传出消息会顺利添加,只有当我尝试触发事件时才会这样做。
感谢您的帮助。
这是控制台中显示的错误
05-15 18:07:15.458 27843-28205/com.co.edu.cun.www1104379214.bienestarcun E/AndroidRuntime: FATAL EXCEPTION: EventThread
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.widget.Toast$TN.<init>(Toast.java:322)
at android.widget.Toast.<init>(Toast.java:91)
at android.widget.Toast.makeText(Toast.java:238)
at com.co.edu.cun.www1104379214.bienestarcun.Funciones.ChatPsicologiaManager.AddTextHistoryChat(ChatPsicologiaManager.java:140)
at com.co.edu.cun.www1104379214.bienestarcun.Funciones.ChatPsicologiaManager.access$000(ChatPsicologiaManager.java:36)
at com.co.edu.cun.www1104379214.bienestarcun.Funciones.ChatPsicologiaManager$1.call(ChatPsicologiaManager.java:90)
at com.github.nkzawa.emitter.Emitter.emit(Emitter.java:117)
at com.github.nkzawa.socketio.client.Socket.onevent(Socket.java:316)
at com.github.nkzawa.socketio.client.Socket.onpacket(Socket.java:280)
at com.github.nkzawa.socketio.client.Socket.access$100(Socket.java:18)
at com.github.nkzawa.socketio.client.Socket$2$2.call(Socket.java:101)
at com.github.nkzawa.emitter.Emitter.emit(Emitter.java:117)
at com.github.nkzawa.socketio.client.Manager.ondecoded(Manager.java:379)
at com.github.nkzawa.socketio.client.Manager.access$1300(Manager.java:20)
at com.github.nkzawa.socketio.client.Manager$3.call(Manager.java:353)
at com.github.nkzawa.emitter.Emitter.emit(Emitter.java:117)
at com.github.nkzawa.socketio.parser.Parser$Decoder.add(Parser.java:156)
at com.github.nkzawa.socketio.client.Manager.ondata(Manager.java:371)
at com.github.nkzawa.socketio.client.Manager.access$1100(Manager.java:20)
at com.github.nkzawa.socketio.client.Manager$2.call(Manager.java:344)
at com.github.nkzawa.emitter.Emitter.emit(Emitter.java:117)
at com.github.nkzawa.engineio.client.Socket.onPacket(Socket.java:485)
at com.github.nkzawa.engineio.client.Socket.access$900(Socket.java:29)
at com.github.nkzawa.engineio.client.Socket$5.call(Socket.java:288)
at com.github.nkzawa.emitter.Emitter.emit(Emitter.java:117)
at com.github.nkzawa.engineio.client.Transport.onPacket(Transport.java:121)
at com.github.nkzawa.engineio.client.Transport.onData(Transport.java:113)
at com.github.nkzawa.engineio.client.transports.WebSocket.access$100(WebSocket.java:19)
at com.github.nkzawa.engineio.client.transports.WebSocket$1$3.run(WebSocket.java:74)
at com.github.nkzawa.thread.EventThread$2.run(EventThread.java:75)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
【问题讨论】:
标签: android node.js android-studio socket.io