Websocket может получить сообщение только один раз - PullRequest
0 голосов
/ 13 февраля 2019

Я использую mockwebserver для создания сервера веб-сокетов и использую webview для загрузки URL-адреса индекса, чтобы клиент отправил мне сообщение, и я отправил некоторые данные обратно и вошел в систему. Каждый раз, когда я загружаю URL-адрес индексаклиент отправит мне сообщение.Теперь проблема в том, что я нажимаю кнопку URL-адреса индекса и перехожу на другую страницу, а обратно на URL-адрес индекса я не получаю сообщение.

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_webview);
    ButterKnife.bind(this);
    initWebView();

    Log.e("MrXieXie---Server", "onCreate");

    new Thread(new Runnable() {
        @Override
        public void run() {
            Server();
            Log.e("MrXieXie---Server", "run");
        }
    }).start();
}

private void initWebView() {
    WebSettings webSettings = webView.getSettings();
    webSettings.setUseWideViewPort(true); 
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    webSettings.setJavaScriptEnabled(true);
    webView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
    webView.loadUrl("http://xxxxxxxx");
}

private void Server() {
    mockWebServer.enqueue(new MockResponse().withWebSocketUpgrade(new WebSocketListener() {
        @Override
        public void onOpen(WebSocket webSocket, Response response) {
            Log.e("MrXieXie---Server", "WebSocketServer ===== onOpen");
        }

        @Override
        public void onMessage(WebSocket webSocket, String text) {
            Log.e("MrXieXie---Server", "WebSocketServer ===== onMessage ===" + text);

            if(!text.isEmpty() && text.equals("USER")){
                webSocket.send("xxxx");
            }
        }

        @Override
        public void onMessage(WebSocket webSocket, ByteString bytes) {
            Log.e("MrXieXie---Server", "WebSocketServer ===== onMessage ===" + bytes);
        }

        @Override
        public void onClosing(WebSocket webSocket, int code, String reason) {
            Log.e("MrXieXie---Server", "WebSocketServer ===== onClosing");
        }

        @Override
        public void onClosed(WebSocket webSocket, int code, String reason) {
            Log.e("MrXieXie---Server", "WebSocketServer ===== onClosed");
        }

        @Override
        public void onFailure(WebSocket webSocket, Throwable t, @Nullable Response response) {
            Log.e("MrXieXie---Server", "WebSocketServer ===== onFailure");
        }
    }));

    try {
        mockWebServer.start(InetAddress.getLocalHost(), 5223);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
...