DefaultHttpClientを使ってコンテンツを取得する
今回はDefaultHttpClientを使ってコンテンツを取得する方法を説明します。
DefaultHttpClientではHTTPリクエスト(GetやPut)を発行することができます。
「XMLをパース(解析)する」の中で紹介したサンプルを、DefaultHttpClientを使って取得したコンテンツをパースするものに修正してみます。
前準備
以前のサンプルからStringとして用意したXMLをパースする箇所をメソッドとして抜き出しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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パーミッションの設定も忘れずに記述しておきます。
1 | <uses-permission android:name="android.permission.INTERNET"/> |
DefaultHttpClient
まずはDefaultHttpClientクラスを生成します。
1 | HttpClient httpClient = new DefaultHttpClient(); |
次に発行したいHTTPリクエストを生成します。
今回は単純にRSSフィードのアドレスを指定するGetリクエストを準備します。
1 2 | HttpGet request = new HttpGet(uri.toString()); |
ここでStringBuilderクラスを使っていますが、このクラスはappendメソッドを使うことで文字列を追加していくことが可能です。WebAPIを使う場合などに便利なのでこちらを利用しますがもちろん下記のように記述しても今回は同じ動作をします。
1 |
または
1 2 | HttpGet request = new HttpGet(uri); |
そしてexecuteメソッドでGetリクエストを送信します。
1 2 3 4 5 6 | HttpResponse httpResponse;try { httpResponse = httpClient.execute(request);} catch (Exception e) { Log.d("HttpSampleActivity", "Error Execute");} |
リクエストのステータスを確認して成功していたら(200なら)、レスポンスをByteArrayOutputStream
に書き出します。
そして準備しておいたパースのメソッドに引数で与えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
6 Comments
