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);
        }
    });
}
    
