モケラ

Tech Sheets

mokelab

OkHttpで、GETリクエストを投げてみる

最終更新日:2022-05-08

まずはGETリクエストを投げてみましょう。

AndroidManifest.xmlを編集する

INTERNETパーミッションが必要です。

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

リクエストを送る

次の3ステップでリクエストを送ります。

  • OkHttpClientオブジェクトを作成する。
  • Requestオブジェクトを作成する。
  • Callオブジェクトを作成し、リクエストを送信する。

順にみていきましょう。

OkHttpClientオブジェクトを作成する

onCreate()あたりでフィールドにセットしておきます。

private OkHttpClient mClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mClient = new OkHttpClient();
}

Requestオブジェクトを作成する

次にRequestオブジェクトを作成します。ここでは、GETであることとURLの指定だけ行っています。

Request request = new Request.Builder()
        .url(url)
        .get()
        .build();

Callオブジェクトを作成し、リクエストを送信する。

OkHttpClientのnewCall()でCallオブジェクトを作成し、enqueue()で非同期リクエストを投げます。レスポンスが受け取れた時はonResponse()が、機内モードなどで通信できなかった時はonFailure()が呼ばれます。結果を文字列で取得する場合は、response.body().string()で取得します。

mClient.newCall(request).enqueue(new Callback() {
    @Override
    public void onResponse(Response response) throws IOException {
        String responseBody = response.body().string();
        showResponse(responseBody);
    }

    @Override
    public void onFailure(Request request, IOException e) {
        Log.e("Main", "onFailure " + e.getMessage(), e);
        showResponse("Failure \n" + e.getMessage());
    }
});

注意点

コールバックのonResponse()はUIスレッド以外で実行されるので、Viewの更新を行う場合はrunOnUIThread()などで実行する必要があります。

private void showResponse(final String message) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            mSendButton.setEnabled(true);
            mResultText.setText(message);
        }
    });
}

一覧に戻る