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