【问题标题】:dynamic views with Android Studio and Socket Io使用 Android Studio 和 Socket Io 的动态视图
【发布时间】: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


    【解决方案1】:

    您是否在代码中的Looper.Loop() 之前添加了Looper.prepare()

    见this

    【讨论】:

    • 这不会像 AsyncTask 一样工作吗?因为我尝试。
    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2018-03-19
    • 2012-04-19
    • 2020-07-07
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多