简体   繁体   English

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

[英]Toast Message is not created when message received at Java Websocket server in Android

I am trying to create basic WebSocket server with this library.我正在尝试使用库创建基本的 WebSocket 服务器。 I want to make a toast message when a message is received.我想在收到消息时制作一条吐司消息。 In onMessage() function below I have implemented that.在下面的 onMessage() 函数中,我已经实现了。 But no toast message is happening.但是没有发生吐司消息。

But Received message is printed on console.但是 Received 消息打印在控制台上。

        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();
}

I think you have to switch to the UI thread to show the Toast.我认为您必须切换到 UI 线程才能显示 Toast。

You can try using a Handler :您可以尝试使用Handler

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

Or calling runOnUiThread :或调用runOnUiThread

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

Or broadcasting the message:或广播消息:

@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);
}

And registering a BroadcastReceiver in your 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();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM