在 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 消息的主要内容,如果未能解决你的问题,请参考以下文章
django+uwsgi+nginx: websock 报502/400