サイト移転のお知らせ:http://techbooster.org/に移転しました

DefaultHttpClientを使ってコンテンツを取得する

11月 10, 2010   //   by kkato   //   アプリケーション  //  2 Comments

今回はDefaultHttpClientを使ってコンテンツを取得する方法を説明します。
DefaultHttpClientではHTTPリクエスト(GetやPut)を発行することができま

「XMLをパース(解析)する」の中で紹介したサンプルを、DefaultHttpClientを使って取得したコンテンツをパースするものに修正してみます。

前準備

以前のサンプルからStringとして用意したXMLをパースする箇所をメソッドとして抜き出しておきます。

    void parse(String str) {
        try{
            XmlPullParser xmlPullParser = Xml.newPullParser();
            xmlPullParser.setInput(new StringReader(str));

            int eventType;
            while ((eventType = xmlPullParser.next()) != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_TAG && "title".equals(xmlPullParser.getName())) {
                    Log.d("HttpSampleActivity", xmlPullParser.nextText());
                }
            }
        } catch (Exception e){
        	Log.d("HttpSampleActivity", "Error:parse");
        }
    }

インターネットに接続するのでAndroidManifest.xmlパーミッションの設定も忘れずに記述しておきます。

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

DefaultHttpClient

まずはDefaultHttpClientクラスを生成します。

HttpClient httpClient = new DefaultHttpClient();

次に発行したいHTTPリクエストを生成します。
今回は単純にRSSフィードのアドレスを指定するGetリクエストを準備します。

StringBuilder uri = new StringBuilder("http://techbooster.jpn.org/?feed=rss2");
HttpGet request = new HttpGet(uri.toString());

ここでStringBuilderクラスを使っていますが、このクラスはappendメソッドを使うことで文字列を追加していくことが可能です。WebAPIを使う場合などに便利なのでこちらを利用しますがもちろん下記のように記述しても今回は同じ動作をします。

HttpGet request = new HttpGet("http://techbooster.jpn.org/?feed=rss2");

または

String uri = "http://techbooster.jpn.org/?feed=rss2";
HttpGet request = new HttpGet(uri);

そしてexecuteメソッドでGetリクエストを送信します。

HttpResponse httpResponse;
try {
	httpResponse = httpClient.execute(request);
} catch (Exception e) {
	Log.d("HttpSampleActivity", "Error Execute");
}

リクエストのステータスを確認して成功していたら(200なら)、レスポンスをByteArrayOutputStream
に書き出します。
そして準備しておいたパースのメソッドに引数で与えます。

int status = httpResponse.getStatusLine().getStatusCode();

if (HttpStatus.SC_OK == status) {
	try {
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		httpResponse.getEntity().writeTo(outputStream);
		parse(outputStream.toString());
	} catch (Exception e) {
		Log.d("HttpSampleActivity", "Error");
	}
} else {
	Log.d("HttpSampleActivity", "Status" + status);
}

SC_OKというには定数で200に相当します。その他の定数を一部あげておきます。

ステータスコード

定数 コード
SC_OK 200
SC_MOVED_PERMANENTLY 301
SC_MOVED_TEMPORARILY 302
SC_NOT_FOUND 404
SC_INTERNAL_SERVER_ERROR 500
SC_SERVICE_UNAVAILABLE 503


関連する記事:

Sponsored Link

2 Comments

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です