weex_devtools中的WeexInspector问题

新手上路,请多包涵

WeexInspector中引入最新的0.13.4包后,按照官方教程添加了CustomWebSocketClient来适配高版本的okhttp,但是在调试应用过程中出现了readtimeout的错误,导致socket连接失败,请问有谁知道解决办法吗?

public class CustomWebSocketClient implements IWebSocketClient {

    private WebSocket ws;

    @Override
    public boolean isOpen() {
        return ws != null;
    }

    @Override
    public void connect(String wsAddress, final WSListener listener) {
        OkHttpClient okHttpClient = new OkHttpClient();
        okHttpClient.setConnectTimeout(30, TimeUnit.SECONDS);
        okHttpClient.setReadTimeout(5, TimeUnit.SECONDS);
        okHttpClient.setWriteTimeout(30, TimeUnit.SECONDS);

        Request request = new Request.Builder().url(wsAddress).build();
        WebSocketCall webSocketCall = WebSocketCall.create(okHttpClient, request);
        webSocketCall.enqueue(new WebSocketListener() {
            @Override
            public void onOpen(WebSocket webSocket, Request request, Response response) throws IOException {
                ws = webSocket;
                listener.onOpen();
            }

            @Override
            public void onMessage(BufferedSource payload, WebSocket.PayloadType type) throws IOException {
               if (WebSocket.PayloadType.TEXT == type) {
                   listener.onMessage(payload.readUtf8());
                   //文档中没有这句代码,但是应该是要加上,否则报错
                   payload.close();
               }
            }

            @Override
            public void onPong(Buffer payload) {
                //ignore
            }

            @Override
            public void onClose(int code, String reason) {
                listener.onClose();
            }

            @Override
            public void onFailure(IOException e) {
                listener.onFailure(e);
            }
        });
    }

    @Override
    public void close() {
        if (ws != null) {
            try {
                ws.close(CloseCodes.NORMAL_CLOSURE, "Normal closure");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void sendMessage(int requestId, String message) {
        if (ws != null) {
            try {
                ws.sendMessage(WebSocket.PayloadType.TEXT, new Buffer().writeString(message, Charset.defaultCharset()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
阅读 3.7k
3 个回答
✓ 已被采纳新手上路,请多包涵

问题解决了:
1.官方的代码有问题,在onMessage里需要加一句payload.close()
2.参照官方的okhttpClient实现,我将readTimeout设置为0,剩下的都设置为30s

应该是你代码编写的问题。

话说你在哪里看到的你说的那篇教程?

新手上路,请多包涵

我也遇到了,我是在chrome上进行调试,只要打开NetWork开关,app就会报错: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/taobao/weex/devtools/inspector/network/NetworkEventReporterImpl , 翻了源码里面是有这个类的,但是这个类实现了一个接口NetworkEventReporter却没有,整个weex-inspector包里面都没有,这是怎么回事?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进