2
http://fig.nowsprouting.com/citychurchofolivebranch/podcast.php?pageID=6
这是我试图解析和显示每个项目的标题的网址。SAXParser如何无法打开网址?
不幸的是,我不断收到此错误
05-28 22:56:08.761 27744-27744/com.tubbs.citychurchob E/SELinux﹕ [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
05-28 23:06:22.801 1927-1927/com.tubbs.citychurchob E/Podcast Fragment Class﹕ Couldn't open http://fig.nowsprouting.com/citychurchofolivebranch/podcast.php?pageID=6
这里是所有相关代码:
播客片段类:
public class PodcastFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.podcast_fragment,container,false);
try {
RssReader rssReader = new RssReader("http://fig.nowsprouting.com/citychurchofolivebranch/podcast.php?pageID=6");
ListView podcastItems = (ListView)v.findViewById(R.id.podcast_list);
ArrayAdapter<PodcastItem> adapter = new ArrayAdapter<PodcastItem>(getActivity(),android.R.layout.simple_list_item_1,rssReader.getItems());
podcastItems.setAdapter(adapter);
}catch (Exception e){
Log.e("Podcast Fragment Class",e.getMessage());
}
return v;
}
}
RssReader类:
public class RssReader {
private String rssFeedUrl;
public RssReader(String rssFeedUrl){
this.rssFeedUrl = rssFeedUrl;
}
public List<PodcastItem> getItems() throws Exception{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
RssParseHandler handler = new RssParseHandler();
saxParser.parse(rssFeedUrl,handler);
return handler.getRssItems();
}
}
RssParseHandler类:
public class RssParseHandler extends DefaultHandler {
private List<PodcastItem> rssItems;
//Used to reference item while parsing
private PodcastItem currentItem;
//Parsing title indicator
private boolean parsingTitle;
public RssParseHandler(){
rssItems = new ArrayList<PodcastItem>();
}
public List<PodcastItem> getRssItems(){
return rssItems;
}
//Basically what this is doing is processing the entire <item> tag(at the start of it) of a particular Rss Feed List.
//It then checks to see if this is truly the start of the <item> tag or the first one
//If it is then it instantiates a New Podcast Item object
//Then it goes further through the list and once it finds <title>, it sets the boolean "parsingTitle" to true
//since it has come across that particular tag
@Override
public void startElement(String uri, String localName, String elementName, Attributes attributes) throws SAXException {
if("item".equals(elementName)){
currentItem = new PodcastItem();
} else if ("title".equals(elementName)) {
parsingTitle = true;
}
}
//Essentialy what this is doing is looking for the end <item> tag, once it has reached it, it will add
//the current PodcastItem Object to the list of "rssItems" since there is no more elements to go through.
//Then it sets the PodcastItem Object to null to start fresh at the next <item> tags.
//It then resets "parsingTitle" to false to once again start fresh at the next <item> tags.
@Override
public void endElement(String uri, String localName, String elementName) throws SAXException {
if("item".equals(elementName)){
rssItems.add(currentItem);
currentItem = null;
}else if ("title".equals(elementName)){
parsingTitle = false;
}
}
//This method checks to see whether "parsingTitle" is true or false. If it is true then it will set
// "currentItem"'s title to whatever was passed into the method. Not sure how this method works.....yet.
//YOU GOT THIS TIM
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(parsingTitle){
if(currentItem != null){
currentItem.setmPodcastTitle(new String(ch,start,length));
}
}
}
}
我还加入了Internet权限标签。
我对XML解析相当陌生,所以我有点不知所措。 任何帮助将是伟大的,谢谢!
不幸的是我有同样的问题和的AsyncTask没有帮助 – Sadik