package jp.mydns.sys1yagi.android.jsoupsample; import jp.mydns.sys1yagi.android.jsoupsample.RssList.Feed; import jp.mydns.sys1yagi.android.jsoupsample.RssList.Item; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.parser.Parser; import org.jsoup.select.Elements; import android.content.Context; import android.support.v4.content.AsyncTaskLoader; import android.util.Log; class RssLoader extends AsyncTaskLoader<RssList> { private final static String TAG = RssLoader.class.getSimpleName(); private Feed mFeed; private RssList mList; public RssLoader(Context context, Feed feed) { super(context); mFeed = feed; mList = null; } @Override protected void onStartLoading() { Log.d(TAG, "onStartLoading"); if (mList != null) { Log.d(TAG, "cahced."); super.deliverResult(mList); } else { Log.d(TAG, "load."); forceLoad(); } }; @Override protected void onStopLoading() { cancelLoad(); } @Override protected void onReset() { super.onReset(); } private void parseDomTraverse(Document document) { Elements elements = document.getElementsByTag("item"); for (Element element : elements) { Item item = new Item(); Elements title = element.getElementsByTag("title"); Elements link = element.getElementsByTag("link"); if (!title.isEmpty()) { item.title = title.get(0).text(); } if (!link.isEmpty()) { item.url = link.get(0).text(); } if (mList == null) { mList = new RssList(); } mList.addItem(item); } } private void parseCssSelector(Document document) { Elements elements = document.select("item"); for (Element element : elements) { Item item = new Item(); Elements title = element.select("title"); Elements link = element.select("link"); if (!title.isEmpty()) { item.title = title.get(0).text(); } if (!link.isEmpty()) { item.url = link.get(0).text(); } if (mList == null) { mList = new RssList(); } mList.addItem(item); } } @Override public RssList loadInBackground() { try { Document document = Jsoup.connect(this.mFeed.url) .parser(Parser.xmlParser()).get(); parseCssSelector(document); // parseDomTraverse(document); } catch (Exception e) { e.printStackTrace(); } return mList; } }