入力ストリーム&XML解析&webブラウザ起動[android編]
今までphpばっかで書いてきて、javaほとんど書いてこなかった。
研究室入る前これぐらい知ってて当然だろって呆れられないように基本知識をまとめてみた。
それに研究室入ると、なかなか自分の時間もとれないだろうし。
とりあえず、試作したのは簡単なRSS取得ツール。
別にRSSじゃなくてもXML形式のデータならいいんだけど。
「入力ストリーム」
Javaではファイルやメモリー内のデータをプログラムに読み込む際、「入力ストリーム」を使用し、吸い上げる。
1.InputStreamクラスで作成した "バイトストリーム"「byte単位」でデータを流す
2.InputStreamReaderクラスで作成した "キャラクターストリーム" で「キャラクタ-単位」に変換
3.BufferedReaderクラスでストリームをバッファ&行単位で扱い、処理効率を向上
参考
※androidアプリはデフォルトではインターネットに接続できないのでパーミッションの設定が必要
後は、複数のデータを格納する部分をアダプターとして作成しアダプターにデータを追加&リストにセット。
「XML解析」
ただXMLを取得するだけだと実用的じゃないのでXMLを解析する。
↓こんな感じ
try{
//入力されたURLからURLクラスのオブジェクトを生成
URL url = new URL(rssURL);
//URLの内容をXmlPullParserで開く
xmlPullParser.setInput(url.openStream(),"UTF-8");
//変数rssDataEventの宣言
int rssDataEvent;
//itemタグのチェック
boolean isItem = false;
//END_DOCUMENTになるまでイベント単位でデータを取り出す
while((rssDataEvent = xmlPullParser.next()) != XmlPullParser.END_DOCUMENT){
//イベントタイプが開始タグならタグの名前を調べる
if(rssDataEvent == XmlPullParser.START_TAG){
//タグの名前がitemであればitemタグ開始
if(xmlPullParser.getName().equals("item")){
isItem = true;
}
//item要素の中の要素を確認
if(isItem){
//タグの名前がtitleであればアダプターに要素を追加
if(xmlPullParser.getName().equals("title")){
adapter.add(xmlPullParser.nextText());
}
}else if(rssDataEvent == XmlPullParser.END_TAG){
//終了タグの名前がitemであればitemタグ終わり
if(xmlPullParser.getName().equals("item")){
isItem = false;
}
}
}
}
}catch(Exception e){
//オープン時のエラーメッセージをrssDataに代入
rssData = "open error: " + e.toString();
}
title部分だけ取り出し、リストビューで表示
Before
After
webブラウザの起動
記事タイトルのクリックでリンク先を表示させる為に、インタフェース「Listコレクション」を用いてリック先をアダプターに格納する。
コードは長いので省略。
こんな感じ。
今回はインテントにオブジェクトの生成時にアクション(動作方法,ACTION_VIEW)と呼び出し先の情報(URI)を指定した。
※インテントとはAndroidでは画面をアクティビティ(Activity)という単位で扱い、インテントと呼ばれるオブジェクトをstartActivityメソッドに渡す事でほかのアプリケーションを呼び出して同一アプリケーション内での画面遷移を実現。