ユーザーID パスワード

技術情報

  • FAQ よくある質問
  • 個人ユーザー向けサービスのお手続きについて

コード&コラム

第4回
通信するアプリを作ってみよう(後編)


前へ 1 |2 |3 |4 次へ

Step1 XML解析

それでは、取得したXMLから記事のタイトルを取り出してその内容を表示してみましょう。

前回の内容で、すでにXMLファイルの取得までできているので、今回はそのXMLを解析するメソッドを作成します。
プログラムの流れは、最初にXMLを読み込んで取得した記事の数を調べ、次にその数に応じて記事のタイトルを格納するString型の配列を確保し、順次記事のタイトルを取得していくというものになります。


img

実は第3回で取得したXMLファイルの内容は上図のようになっています。図を見てもらえれば分かるように、XMLファイルでは各要素がタグによって表現されています。取得できた記事の個数を得るためにはResultSetタグのTotalResultsReturnedの値を、記事のタイトルの取得するにはTitleタグの値を取得します。

それではプログラムを見ていきましょう。

はじめに、クラスのメンバ変数として取得できた記事の数と記事のタイトルを保持する変数を作成します。

        static private String mArticleTitle[];


        static private int mArticleNum;

次に,XMLファイルの解析を行い、記事の個数とタイトルを取得するメソッドreadXMLを作成します。
解析にはXmlPullParserクラスを使用します。このクラスを使うことでタグの内容を容易に取り出すことが出来ます。

        public static void readXML(InputStream stream)
                        throws XmlPullParserException {
               try {
                        // (1)XmlPullParserの用意
                        XmlPullParser myxmlPullParser = Xml.newPullParser();
                        myxmlPullParser. setInput(stream, "UTF-8");

                        int cntTitle = 0;
                        for (int e = myxmlPullParser.getEventType(); e != XmlPullParser.END_DOCUMENT; e = myxmlPullParser
                                        .next()) {
                                if (e == XmlPullParser.START_TAG) {
                                        if (myxmlPullParser.getName().equals("ResultSet")) {
                                                // (2)取得した記事の個数の取得
                                                mArticleNum = Integer
                                                                .parseInt(myxmlPullParser.getAttributeValue(
                                                                                null, "totalResultsReturned"));
                                                mArticleTitle = new String[mArticleNum];
                                        } else if (myxmlPullParser.getName().equals(" Title")) {
                                                // (3)記事のタイトルの取得
                                                mArticleTitle[cntTitle] = myxmlPullParser.nextText();
                                                cntTitle++;
                                        }
                                }

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

        }

(1)XmlPullParserの用意
    XmlPullParserのオブジェクトを取得し、 setInputの引数に第一引数に解析したいストリーム、第二引数にその文字コードを指定します。

(2)取得した記事の個数の取得
    if (e ==XmlPullParser.START_TAG)によって読み込んだ内容がタグであるかを確認します。
    myxmlPullParser.getName().equals("ResultSet")によってタグの内容がResultSetであるか確認します。
    さらにmyxmlPullParser.getAttributeValu(null, "totalResultsReturned");では第一引数に名前空間(今回は使用しない)、第二引数に記事の属性を指定し、内容を取得します。

(3)記事のタイトルの取得
    myxmlPullParser.getName().equals("Title")によってタグの内容がTitleであることを確認し、myxmlPullParser.nextText();で内容を取得します。

作成したreadXMLはhttpGet内で呼び出すようにします。引数としてURLクラスから取得したstreamを渡します。
今回はhttpGetの戻り値を、全てのタイトルを結合した変数dataに変更します。

        public static String httpGet(String strURL) {
                try {
                        URL url = new URL(strURL);
                        URLConnection connection = url.openConnection();

                        connection.setDoInput(true);
                        InputStream stream = connection.getInputStream();
                        readXML(stream);

                        String data = "";
                        for(int i=0; i<mArticleNum; i++){
                                data += mArticleTitle[i];
                        }

                        stream.close();
                        return data;
                } catch (Exception e) {
                        return e.toString();
                }

実行結果は以下のようになります。これでXMLファイルの解析を行い、必要な要素を取り出すことが出来ました。

しかしこれでは文字列を表示しただけでアプリケーションになっているとは言えません。
次のステップではListViewを使って表示をまとめてみましょう。


img

第4回 通信するアプリを作ってみよう(後編)
 Step1 XML解析
 Step2 ListViewによる記事の表示
 Step3 ボタンの配置とブラウザ呼び出し

サンプルコード

第1回 リファレンスコード(文字列編)

第2回 リファレンスコード2(グラフィックス編)

第3回 リファレンスコード3(タッチイベント編)

第4回 リファレンスコード4(チェックボックス/ラジオグループ編)

第5回 リファレンスコード5(スピナー編)

第6回 リファレンスコード6(サウンド/ムービー編)

第7回 リファレンスコード7(トースト編)

第8回 リファレンスコード8(Google Maps API利用編)

第9回 リファレンスコード9(SQLite編)

第10回 リファレンスコード10(音声認識編)

第11回 リファレンスコード11(日付/時刻ダイアログ編)

第12回 リファレンスコード12(Bluetooth編)