AndroidでOkHttp3を利用してネットワークアクセスを行う

Javaでのネットワークアクセスを行うにはHttpClientなどいくつか方法がありますが、今回はOkHttp3を利用してみたいと思います。

事前準備1(build.gradle)

OkHttpを取り込みます。

compile 'com.squareup.okhttp3:okhttp:3.10.0'

事前準備2(AndroidManifest.xml)

ネットワークアクセスを許可してあげます。

<uses-permission android:name="android.permission.INTERNET" />

実装

yahoo商品検索APIを利用して実現したいと思います、とりあえずgetだけ。

このAPIは事前にappidが必要なので事前に取得して下さい。

import android.os.AsyncTask;
import net.kagamikarasu.pricechacker.Product;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
public class NetworkUtils {
private static final String yahooAppId = "******";
public static List&lt;Product&gt; getYahooProduct(Long jan_code) {
final Long final_jan = jan_code;
List&lt;Product&gt; productList = new ArrayList&lt;&gt;();
try {
productList = new AsyncTask&lt;Void, Void, List&lt;Product&gt;&gt;() {
@Override
protected List&lt;Product&gt; doInBackground(Void... voids) {
List&lt;Product&gt; productList = new ArrayList&lt;&gt;();
try {
Request request = new Request.Builder()
.url("http://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch?appid=" + yahooAppId + "&amp;jan=" + final_jan)
.get()
.build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
productList = Parser.getYahooProduct(response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
return productList;
}
}.execute().get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return productList;
}
}

エラー処理などはここでは省かせて頂きます。

ポイント1:非同期通信

Androidでは非同期でないネットワークアクセスは許可されていないのでAsyncTaskを使用します。

ポイント2:戻り型

Stringだけではなく、List、独自クラスなど自由に返せます。

上記コードではnew AsyncTaskでList<Product>を返しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です