Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

okHttp3 java.lang.NoSuchMethodError: No virtual method setCallWebSocket

Tags:

android

okhttp

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)
like image 933
Leonardo Deleon Avatar asked Feb 13 '17 16:02

Leonardo Deleon


2 Answers

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. :)

like image 61
Woppi Avatar answered Oct 23 '22 09:10

Woppi


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

like image 5
user2159203 Avatar answered Oct 23 '22 08:10

user2159203