アンドロイドのあれこれ
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
XmlPullParserでRSSを取得する
AndroidでRSSの情報を取得するサンプルを紹介します。
AsyncTaskを使って非同期処理でRSSを取得してXmlPullParserでパースしMainActivityに返す流れです。
// RssParserAsyncTask.java public class RssParserAsyncTask extends AsyncTask<String, Integer, ArrayList<NewsItem>> { private NewsActivity mActivity = null; private String xmldataString = null; public RssParserAsyncTask(NewsActivity activity) { mActivity = activity; } @Override protected void onPreExecute(){ } //バックグラウンドにおける処理 @Override protected ArrayList<NewsItem> doInBackground(String... params){ ArrayList<NewsItem> result = null; try { URL url = new URL(params[0]); InputStream is = url.openConnection().getInputStream(); result = parseXml(is); } catch (Exception e) { Log.v("ERROR", "on doInBackground msg:" + e.getMessage()); return null; } return result; } @Override protected void onPostExecute (ArrayList<NewsItem> result){ mActivity.setListNews(result); } // XMLをパースする public ArrayList<NewsItem> parseXml(InputStream is) throws IOException, XmlPullParserException { ArrayList<NewsItem> itemList = new ArrayList<NewsItem>(); XmlPullParser parser = Xml.newPullParser(); try { parser.setInput(is, null); int eventType = parser.getEventType(); NewsItem currentItem = null; int itemCount = 0; while (eventType != XmlPullParser.END_DOCUMENT) { String tag = null; switch (eventType) { case XmlPullParser.START_TAG: tag = parser.getName(); if (tag.equals("item")) { currentItem = new NewsItem(); } else if (currentItem != null) { if (tag.equals("title")) { currentItem.setTitle(parser.nextText()); } else if (tag.equals("description")) { currentItem.setText(parser.nextText()); } else if (tag.equals("link")) { currentItem.setLink(parser.nextText()); } } break; case XmlPullParser.END_TAG: tag = parser.getName(); if (tag.equals("item")) { itemList.add(currentItem); itemCount++; } break; } eventType = parser.next(); } } catch (Exception e) { Log.v("ERROR", "on parseXML msg:" + e.getMessage()); return null; } return itemList; } }
//NewsItem.xml public class NewsItem { private String _Title; private String _Text; private String _Link; public void setTitle(String title) { _Title = title; } public String getTitle() { return _Title; } public void setText(String text) { _Text = text; } public String getText() { return _Text; } public void setLink(String link) { _Link = link; } public String getLink() { return _Link; } }
//MainActivity.java public class MainActivity extends ListActivity { private ArrayList<NewsItem> nList; private NewsListAdapter adapter; private String rssUrl = "..."; //RSSのURL @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_list); RssParserAsyncTask rssTask = new RssParserAsyncTask(this); rssTask.execute(rssUrl); } public void setListNews(ArrayList<NewsItem> listItem) { nList = new ArrayList(); if (listItem != null) { int itemNum = listItem.size(); for (int a=0; a<itemNum; a++) { nList.add(listItem.get(a)); } } adapter = new NewsListAdapter(this, nList); setListAdapter(adapter); }
COMMENT