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>を返しています。

コメントを残す

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