Help us understand the problem. What is going on with this article?

AndroidでのHTTP通信

More than 3 years have passed since last update.

AndroidでのHTTP通信方法をメモ目的に投稿します。
こちらを参考にしました。

注意点

以下の項目を注意してください。

パーミッション

  • インターネットを使用するため、"android.permission.INTERNET"のパーミッションを設定してください。
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />

非同期処理

  • AndroidでHTTP通信をするには非同期処理である必要があります。エラーが発生するので注意してください。

ちょっと記述してみる

サンプルがてらちょっとプログラムを記述します。
注意点でも記載していますが、HTTP通信を行うには非同期処理が必要になります。
非同期処理ということで、"android.os.AsyncTask"を使用します。

AsyncTaskクラスを継承したクラスを作成

非同期処理のための、AsyncTaskを継承したクラスを作成します。
doInBackground(Void... params)をオーバライドしてください(オーバラードしないとエラーとなります)。
※今回はonPreExcute(), onPostExecute(String result)も使用します。

AsyncTask継承クラス
public class HttpResponsAsync extends AsyncTask<Void, Void, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // doInBackground前処理
    }

    @Override
    protected String doInBackground(Void... params) {
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        // doInBackground後処理
    }

}

doInBackground内に通信処理を記述する

では通信処理を記述します。昔は"HttpPost(HttpGet)"を使用していましたが、非推奨になったんで"HttpURLConnection"を使用します。

AsyncTask継承クラス
@Override
protected String doInBackground(Void... params) {
    HttpURLConnection con = null;
    URL url = null;
    String urlSt = "http://sample.jp";

    try {
        // URLの作成
        url = new URL(urlSt);
        // 接続用HttpURLConnectionオブジェクト作成
        con = (HttpURLConnection)url.openConnection();
        // リクエストメソッドの設定
        con.setRequestMethod("POST");
        // リダイレクトを自動で許可しない設定
        con.setInstanceFollowRedirects(false);
        // URL接続からデータを読み取る場合はtrue
        con.setDoInput(true);
        // URL接続にデータを書き込む場合はtrue
        con.setDoOutput(true);

        // 接続
        con.connect(); // ①

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    return null;
}

①の時点で接続を開始しています。このメソッドが実行された時点で、サーバーからレスポンスが返ってきます。

本文を取得する

返ってきたレスポンスから本文を取得します。
取得する場合は"setDoInput(true)"を設定してください。

AsyncTask継承クラス
con.connect(); // ①
// 本文の取得
InputStream in = con.getInputStream();
byte bodyByte[] = new byte[1024];
in.read(bodyByte);
in.close();

"bodyByte"が本文のbody部分です。
このbodyをWebブラウザで表示させることができます。

Jsonを取得する

ついでにJson取得方法もメモします。
Jsonデータを取得するにはまずレスポンスからStringデータとして抜き出します。

AsyncTask継承クラス
con.connect(); // ①
InputStream in = con.getInputStream();
String readSt = readInputStream(in);

public String readInputStream(InputStream in) throws IOException, UnsupportedEncodingException {
        StringBuffer sb = new StringBuffer();
        String st = "";

        BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
        while((st = br.readLine()) != null)
        {
            sb.append(st);
        }
        try
        {
            in.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return sb.toString();
    }

出来たデータをJsonにパースします。

AsyncTask継承クラス
JSONObject jsonData = new JSONObject(readSt).getJSONObject("オブジェクト名");
// 配列を取得する場合
JSONArray jsonArray = new JSONObject(readSt).getJSONArray("オブジェクト名");

後は、各データ型に合わせて取得する

AsyncTask継承クラス
// String型の場合
String st = jsonData.getString("オブジェクト名");

終わりに

いつまでこの方法がサポートされるか微妙ですが、ご参考ください。

aivick
創意工夫でお客様の課題を解決し続ける古都京都のシステム開発会社です。ベンチャー精神を忘れず、ヘルスケア業界に革新をもたらす新サービスの実現も目指しています。
https://www.aivick.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした