Android WebAPIからデータをXMLで取得して解析

WebAPIにリクエストを投げて、結果をXMLで受け取ってパースするサンプルをずっと作ってました。
いや、慣れてないせいか時間かかりました。
メモっときます。

1、HttpReqest
DefaultHttpClientを使うのが簡単みたいです。
リクエストのURLはuriBuilderで生成して、試しにブログのRSSにしてみます。


//DefaultHttpClientを生成
HttpClient httpClient = new DefaultHttpClient();

//ブログのRSS
StringBuilder uriBuilder = new StringBuilder("http://xiangcai.at.webry.info/rss/index.rdf");
//HttpGetを生成する
HttpGet request = new HttpGet(uriBuilder.toString());
HttpResponse response1 = null;

//リクエストする
try {
response1 = httpClient.execute(request);
} catch (ClientProtocolException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}


DefaultHttpClientに対してURIをセットしてexecuteするとレスポンスがあるので
結果を見て対処します。
結果がOKだったら、パースして「title」の中身だけ取り出してみます。

//リクエストした結果のステータスを取得する
int status = response1.getStatusLine().getStatusCode();
//リクエスト結果のステータスが成功:200だったら結果をパースする
if (status == HttpStatus.SC_OK) {
try {

//レスポンスをOutputStreamに書き出す
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
response1.getEntity().writeTo(ostream);

//XMLパーサーを生成する
final XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
final XmlPullParser parser = factory.newPullParser();
//XMLパーサに解析したい内容を設定する
parser.setInput(new StringReader(ostream.toString()));

//XML文章の終わりまでループして解析する
for(int eventType = parser.getEventType();eventType != XmlPullParser.END_DOCUMENT; eventType = parser.next()){
String tagName;
String tagText;

switch(eventType){
//TAGの始まり
case XmlPullParser.START_TAG:
//TAGの名前を取得する
tagName = parser.getName();

//TAGの名前がtitle
if(tagName.equals("title")){
//次の要素へ進む
parser.next();

//要素がTEXTだったら内容を取り出す
if(parser.getEventType() == XmlPullParser.TEXT){
tagText = parser.getText();
Log.i(TAG, tagText);
}
}

break;
}

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 15

なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
驚いた
ナイス ナイス ナイス ナイス
ガッツ(がんばれ!)
かわいい かわいい

この記事へのコメント

とんぼ
2009年07月26日 12:52
参考になりました、ありがとうございます。
終わりの方にある
Log.i(TAG, "tagText");
は、
Log.i(TAG, tagText);
でしょうか。

揚げ足取りですみません><
それでは失礼します!
パクチー
2009年07月26日 13:03
>とんぼさん
おお、書き間違いです。
デバッガで直接変数の中身見てたので気づきませんでした。
Log.i(TAG, tagText);
が正しいです。
ありがとうございます。
参考になったのであれば嬉しいです。

この記事へのトラックバック