まさに聴診器のようにアプリを診察できるStethoがよさそうだったので手を出してみたら変なところでハマったのでメモしておきます。
Stethoのわかりやすい紹介はこちら ⇒ StethoでAndroidのNetwork Performanceを見る
現象
上の紹介の通りにbuild.gradle
に記述してApplicationクラスで初期化するとビルドは通りますが、実行時に通信エラーになります。
W/System.err﹕ java.io.IOException: Address already in use
W/System.err﹕ at android.net.LocalSocketImpl.bindLocal(Native Method)
W/System.err﹕ at android.net.LocalSocketImpl.bind(LocalSocketImpl.java:303)
W/System.err﹕ at android.net.LocalServerSocket.(LocalServerSocket.java:52)
W/System.err﹕ at com.facebook.stetho.server.LocalSocketHttpServer.bindToSocket(LocalSocketHttpServer.java:278)
W/System.err﹕ at com.facebook.stetho.server.LocalSocketHttpServer.listenOnAddress(LocalSocketHttpServer.java:138)
W/System.err﹕ at com.facebook.stetho.server.LocalSocketHttpServer.run(LocalSocketHttpServer.java:134)
W/System.err﹕ at com.facebook.stetho.Stetho$1.run(Stetho.java:80)
E/stetho﹕ Could not bind to socket.
原因
タイトルの通りで、 Retrofit 1.9未満だと使えない って話です。
古いバージョンだとokhttpのInterceptorに対応しておらず、初期化時にStethoInterceptor
を追加すると動かなくなるらしいです。
OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new StethoInterceptor()); // ⇦ ココ
なので、Retrofitを1.9以上に、できれば最新まであげれば解決します。
ライブラリは定期的にアップデートしていくようにしないとダメですね。
以上です。