技術的メモ

個人的な備忘録として記録を残していきます

RSS Readerアプリ作成2日目

今回は前回途中まで作成したRSS Readerの続きを作成してみます。
記事は以下
Androidで広がる、携帯アプリ開発の世界 - 第5回 RSSリーダーの要、パース機能を知る:ITpro

とりあえずRssParserTask.javaを作成していきます。

package jp.hatenadiary.amatuka.simplerssreader;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Xml;

public class RssParserTask extends AsyncTask<String, Integer, RssListAdapter> {
	private RssReaderActivity mActivity;
	private RssListAdapter mAdapter;
	private ProgressDialog mProgressDialog;
	
	public RssParserTask(RssReaderActivity activity, RssListAdapter adapter) {
		mActivity = activity;
		mAdapter = adapter;
	}
	
	@Override
	protected void onPreExecute() {
		mProgressDialog = new ProgressDialog(mActivity);
		mProgressDialog.setMessage("Now Loading...");
		mProgressDialog.show();
	}
	
	@Override
	protected RssListAdapter doInBackground(String... params) {
		RssListAdapter result = null;
		try {
			URL url = new URL(params[0]);
			InputStream is = url.openConnection().getInputStream();
			result = parseXml(is);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	@Override
	protected void onPostExecute(RssListAdapter result) {
		mProgressDialog.dismiss();
		mActivity.setListAdapter(result);
	}
	
	public RssListAdapter parseXml(InputStream is) throws IOException, XmlPullParserException {
		XmlPullParser parser = Xml.newPullParser();
		try {
			parser.setInput(is, null);
			int eventType = parser.getEventType();
			Item currentItem = null;
			while (eventType != XmlPullParser.END_DOCUMENT) {
				String tag = null;
				switch (eventType) {
				case XmlPullParser.START_TAG:
					tag = parser.getName();
					if (tag.equals("item")) {
						currentItem = new Item();
					} else if (currentItem != null) {
						if (tag.equals("title")){
							currentItem.setTitle(parser.nextText());
						} else if (tag.equals("description")) {
							currentItem.setDescription(parser.nextText());
						}
					}
					break;
				case XmlPullParser.END_TAG:
					tag = parser.getName();
					if (tag.equals("item")) {
						mAdapter.add(currentItem);
					}
				break;
				}
				eventType = parser.next();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return mAdapter;
	}

}

RssReaderActivity.javaも以下のように追加する。

package jp.hatenadiary.amatuka.simplerssreader;

import java.util.ArrayList;
import android.os.Bundle;
import android.app.ListActivity;

public class RssReaderActivity extends ListActivity {
	public static final String RSS_FEED_URL = "http://itpro.nikkeibp.co.jp/rss/ITpro.rdf"; //追加
	private ArrayList<Item> mItems;
	private RssListAdapter mAdapter;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.activity_rss_reader);
    	
    	mItems = new ArrayList<Item>();
    	mAdapter = new RssListAdapter(this, mItems);
    	RssParserTask task = new RssParserTask(this, mAdapter); //追加
    	task.execute(RSS_FEED_URL);//追加
    }   
}

上記のように入力してみたのですがちゃんと動いてくれません(´・ω・`)

明日は動くようにがんばります(・ω<)