在 Android 中的 Java Websocket 服务器收到消息时,未创建 Toast 消息

Posted

技术标签:

【中文标题】在 Android 中的 Java Websocket 服务器收到消息时,未创建 Toast 消息【英文标题】:Toast Message is not created when message received at Java Websocket server in Android 【发布时间】:2020-09-19 21:09:41 【问题描述】:

我正在尝试使用 this 库创建基本的 WebSocket 服务器。 我想在收到消息时发一条祝酒消息。 在下面的 onMessage() 函数中,我已经实现了这一点。但是没有 toast 消息发生。

但是收到的消息打印在控制台上。

        WebSocketServer ws = new WebSocketServer(new InetSocketAddress(3000)) 

        @Override
        public void onOpen(WebSocket conn, ClientHandshake handshake) 
            conn.send("Hello world");
        

        @Override
        public void onClose(WebSocket conn, int code, String reason, boolean remote) 

        

        @Override
        public void onMessage(WebSocket conn, String message) 
            System.out.println("Recieved: "+message);
            Toast.makeText(MainActivity.this, "Recieved: " + message, Toast.LENGTH_SHORT).show();
        

        @Override
        public void onError(WebSocket conn, Exception ex) 

        

        @Override
        public void onStart() 

        
    ;
    ws.start();

【问题讨论】:

【参考方案1】:

我认为您必须切换到 UI 线程才能显示 Toast。

您可以尝试使用Handler

new Handler(Looper.getMainLooper()).post(new Runnable() 
    public void run() 
        Toast.makeText(MainActivity.this, "Received: " + message, Toast.LENGTH_SHORT).show();
    
);

或致电runOnUiThread

runOnUiThread(new Runnable() 
    @Override
    public void run() 
        Toast.makeText(MainActivity.this, "Received: " + message, Toast.LENGTH_SHORT).show();
    
);

或广播消息:

@Override
public void onMessage(WebSocket conn, String message) 
    System.out.println("Recieved: "+message);

    Intent intent = new Intent("msgReceived");
    intent.putExtra("message", message);
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

并在您的 Activity 中注册一个 BroadcastReceiver:

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() 
    @Override
    public void onReceive(Context context, Intent intent) 
        String message = intent.getExtras().getString("message");
        Toast.makeText(MainActivity.this, "Received: " + message, Toast.LENGTH_SHORT).show();
    
;

@Override
protected void onStart() 
    super.onStart();
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("msgReceived"));

@Override
protected void onStop() 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
    super.onStop();

【讨论】:

以上是关于在 Android 中的 Java Websocket 服务器收到消息时,未创建 Toast 消息的主要内容,如果未能解决你的问题,请参考以下文章

webSock 重连机构 简略版

websock第一次连不上window

websock使用

django+uwsgi+nginx: websock 报502/400

本人对于netty框架的一些理解,怎么与网站上的websock建立连接

WebSocket实现Java后台消息推送