okHttp3 java.lang.NoSuchMethodError: No virtual method setCallWebSocket

拥有回忆 提交于 2019-12-22 09:26:51

问题


I've updated from okhttp + retrofit to okhttp3 + retrofit2 but my app doesn't start cause of this Exception

FATAL EXCEPTION: EventThread
Process: appli.speaky.com, PID: 14705
java.lang.NoSuchMethodError: No virtual method setCallWebSocket(Lokhttp3/Call;)V in class Lokhttp3/internal/Internal; or its super classes (declaration of 'okhttp3.internal.Internal' appears in /data/data/appli.example.com/files/instant-run/dex/slice-okhttp-3.6.0_29bb10e5f590229716bfa8daf196d09ea67f56a8-classes.dex)
    at okhttp3.ws.WebSocketCall.enqueue(WebSocketCall.java:108)
    at io.socket.engineio.client.transports.WebSocket.doOpen(WebSocket.java:84)
    at io.socket.engineio.client.Transport$1.run(Transport.java:82)
    at io.socket.thread.EventThread.exec(EventThread.java:55)
    at io.socket.engineio.client.Transport.open(Transport.java:77)
    at io.socket.engineio.client.Socket.probe(Socket.java:472)
    at io.socket.engineio.client.Socket.onOpen(Socket.java:485)
    at io.socket.engineio.client.Socket.onHandshake(Socket.java:526)
    at io.socket.engineio.client.Socket.onPacket(Socket.java:499)
    at io.socket.engineio.client.Socket.access$1000(Socket.java:31)
    at io.socket.engineio.client.Socket$5.call(Socket.java:313)
    at io.socket.emitter.Emitter.emit(Emitter.java:117)
    at io.socket.engineio.client.Transport.onPacket(Transport.java:134)
    at io.socket.engineio.client.transports.Polling.access$700(Polling.java:17)
    at io.socket.engineio.client.transports.Polling$2.call(Polling.java:124)
    at io.socket.engineio.parser.Parser.decodePayload(Parser.java:251)
    at io.socket.engineio.client.transports.Polling._onData(Polling.java:134)
    at io.socket.engineio.client.transports.Polling.onData(Polling.java:106)
    at io.socket.engineio.client.transports.PollingXHR$5$1.run(PollingXHR.java:111)
    at io.socket.thread.EventThread$2.run(EventThread.java:80)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

回答1:


I also had the same issue. The issue was I am using socket 0.8.0 which I think has conflict with OKHTTP websocket implem.

Upon upgrading to the latest version of socket.io

compile('io.socket:socket.io-client:0.8.3') {
    exclude group: 'org.json', module: 'json'
}

and also using the latest version of OKHTTP (no need to include okhttp-ws)

compile "com.squareup.okhttp3:okhttp:3.7.0"
compile "com.squareup.okhttp3:logging-interceptor:3.7.0"

my app is not crashing upon first load and it is connecting to sockets. Interceptor also has no conflict whatsoever and is logging as expected on logcat.

With this, there is no need to downgrade your version of okHTTP for which it has been the working solution in the past. :)




回答2:


Hi there,I have the same issue just days ago(my app is a react-native) ,I just use the 3.4.1 version to replace the latest,and solved it!

compile "com.squareup.okhttp3:okhttp:3.4.1"
compile "com.squareup.okhttp3:logging-interceptor:3.4.1"

and I guess it is caused by the Retrofit2's okhttp lib




回答3:


I had this issue after launching the Android Studio Profiler, even after closing the profiler. Had to restart Android Studio to fix it.




回答4:


I had similar issue. Problem with my project was it was using okhttp-3.3.1 which do not have method setCallWebSocket.

Make sure you add correct version of okhttp in your gradle and the older version which does not have setCallWebSocket are not included elsewhere under your project libraries or dependencies.



来源:https://stackoverflow.com/questions/42209251/okhttp3-java-lang-nosuchmethoderror-no-virtual-method-setcallwebsocket

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!