java - 在 Android 中的 Java Websocket 服务器收到消息时,未创建 Toast 消息
问题描述
我正在尝试使用这个库创建基本的 WebSocket 服务器。我想在收到消息时发一条祝酒消息。在下面的 onMessage() 函数中,我已经实现了这一点。但是没有吐司消息发生。
但是收到的消息会打印在控制台上。
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();
}
解决方案
我认为您必须切换到 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);
}
并在您的活动中注册广播接收器:
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();
}
推荐阅读
- angular - 将引导程序 4 降级到 3.3 角度
- java - 在 Android Studio 中使用 JSoup 获取类头下的文本
- c - c中迷宫程序中的分段错误
- c++ - WINAPI C++ GetDlgItem 不返回有效句柄
- php - 我可以从脚本标签调用我的数据库数据吗?
- docker - 如何在不每次都重新创建容器的情况下提供 html 文件?
- apache-kafka - 是否可以为 Google Pub/Sub 主题定义架构,例如在 Kafka 中使用 AVRO?
- java - 快速排序降序
- c++ - QThread 与 QTimer 连接问题
- java - 错误 - 处理请求期间发生异常:null java.lang.NullPointerException