如何解决在Android的Java Websocket服务器上收到消息时未创建Toast消息
我正在尝试使用 this 库创建基本的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,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);
}
并在您的活动中注册BroadcastReceiver:
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context,Intent intent) {
String message = intent.getExtras().getString("message");
Toast.makeText(MainActivity.this,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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。