この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
OkHttpのバージョンが3になりいくつか変更点がありましたので変更点も含めてOkHttpの使い方をご紹介します。
Rxを使わずシンプルにOkHttpだけで通信処理をしています。
今回もいつもと同じopenweathermapを使っています。
OkHttp2とOkHttp3の違い
まず OkHttpの使い方のおさらいです。
- Requestオブジェクト作る
- OkHttpオブジェクト作る
- enqueue()メソッドにコールバックを定義する
[OkHttp2]
Request request = new Request.Builder()
.url("http://api.openweathermap.org/data/2.5/weather?id=2172797&APPID=464b981be2248f383ab898810xxxxxxx")
.get()
.build();
OkHttpClient client = new OkHttpClient();
client.setReadTimeout(15 * 1000, TimeUnit.MILLISECONDS);
client.setConnectTimeout(20 * 1000, TimeUnit.MILLISECONDS);
client.setWriteTimeout(20 * 1000, TimeUnit.MILLISECONDS);
client.interceptors().add(new StethoInterceptor());
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
}
});
compile 'com.squareup.okhttp:okhttp:2.4.0'
1-4行目でRequestにurl()でurlを指定して、get()でHTTPメソッドを指定しています。post()メソッドやput()メソッドもあります。
他にも必要であればaddHeader()やcacheControl()メソッドでヘッダーに必要な情報を追加することができます。
5-9行目でOkHttpClientにはタイムアウトの設定をしてInterceptorをセットしています。
stethoについてはこちらの弊社ブログをご覧ください。
11行目でnewCall()メソッドでCallオブジェクトを取得してenqueue()でキューへ送っています。
enqueue()メソッドの引数にCallbackを定義して結果をハンドリングをします。
enqueue()ではなくexecute()と書くと
android.os.NetworkOnMainThreadException
が発生します。
AsyncTaskなどで非同期で実行する場合はexecute()と書くことができます。
[OkHttp3]
Request request = new Request.Builder()
.url("http://api.openweathermap.org/data/2.5/weather?id=2172797&APPID=464b981be2248f383ab898810xxxxxxx")
.get()
.build();
OkHttpClient client = new OkHttpClient().newBuilder()
.readTimeout(15 * 1000, TimeUnit.MILLISECONDS)
.writeTimeout(20 * 1000, TimeUnit.MILLISECONDS)
.connectTimeout(20 * 1000, TimeUnit.MILLISECONDS)
.addNetworkInterceptor(new StethoInterceptor())
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
compile 'com.squareup.okhttp3:okhttp:3.0.1'
Timeoutの設定やInterceptor()のセットはOkHttpClient().newBuilder()で行うようになりました。
またCallbackでCallオブジェクトが渡されるようになりました。
ここで渡されるCallオブジェクトは13行目でenqueue()メソッドでキューへ送ったCallオブジェクトが渡されるのでcall.cancelでcall.enqueueといったハンドリングができます。
最後に
他にもCookieの扱いやFormやMultipart周りがOkHttp3で変更されたので後日紹介します。