刚学android,这两天尝试在做rss阅读器
读懂了相关源码,运行也没有报错,可是得不出结果,看代码页也找不错错误,求高手不吝赐教
private RSSFeed getFeed(String urlToRssFeed)
{
try
{
URL url=new URL(urlToRssFeed);
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
XMLReader xmlreader=parser.getXMLReader();
RSSHandler theRssHandler=new RSSHandler();
xmlreader.setContentHandler(theRssHandler);
InputStream inPutStream = url.openStream();
InputStreamReader inPutStreamReader= new InputStreamReader(inPutStream, "utf-8");
InputSource is =new InputSource(inPutStreamReader);
xmlreader.parse(is);
return theRssHandler.getFeed();
}
catch (Exception ee)
{
return null;
}
}
以上是解析的部分代码,下面是handler代码,
public class RSSHandler extends DefaultHandler{
RSSFeed _feed;
RSSItem _item;
String _lastElementName="";
boolean bFoundChannel=false;
int currentstate=0;//不感兴趣则置为0
final int RSS_TITLE=1;
final int RSS_LINK=2;
final int RSS_DESCRIPTION=3;
final int RSS_CATEGORY=4;
final int RSS_PUBDATE=5;
int depth=0;
RSSHandler()
{
}
RSSFeed getFeed()
{
return _feed;
}
//实现sax解析
public void startDocument() throws SAXException
{
_feed= new RSSFeed();
_item= new RSSItem();
}
public void endDocument() throws SAXException
{
}
public void startElement(String namespaceURI,String localName,String qName,Attributes atts) throws SAXException
{
depth++;
if(localName.equals("channel"))
{
currentstate=0;
return;
}
/*if(localName.equals("image"))
{
_feed.setTitle(_item.getTitle());
_feed.setPubDate(_item.getPubDate());
}*/
if(localName.equals("item"))
{
_item=new RSSItem();
return;
}
if(localName.equals("title"))
{
currentstate=RSS_TITLE;
return;
}
if(localName.equals("description"))
{
currentstate=RSS_DESCRIPTION;
return;
}
if(localName.equals("link"))
{
currentstate=RSS_LINK;
return;
}
if(localName.equals("category"))
{
currentstate=RSS_CATEGORY;
return;
}
if(localName.equals("pubDate"))
{
currentstate=RSS_PUBDATE;
return;
}
currentstate=0;
}
public void endElement(String namespaceURI,String localName,String qName) throws SAXException
{
depth--;
if(localName.equals("item"))
{
_feed.addItem(_item);
return;
}
}
public void characters(char ch[],int start,int length)
{
String theString=new String(ch,start,length);
Log.i("RSSReader","characters["+theString+"]");
switch(currentstate)
{
case RSS_TITLE:
_item.setTitle(theString);
_feed.setTitle(theString);
currentstate=0;
break;
case RSS_LINK:
_item.setLink(theString);
currentstate=0;
break;
case RSS_DESCRIPTION:
_item.setDescription(theString);
currentstate=0;
break;
case RSS_CATEGORY:
_item.setCategory(theString);
currentstate=0;
break;
case RSS_PUBDATE:
_item.setPubDate(theString);
_feed.setTitle(theString);
currentstate=0;
break;
default:
return;
}
}
求解答
读懂了相关源码,运行也没有报错,可是得不出结果,看代码页也找不错错误,求高手不吝赐教
private RSSFeed getFeed(String urlToRssFeed)
{
try
{
URL url=new URL(urlToRssFeed);
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
XMLReader xmlreader=parser.getXMLReader();
RSSHandler theRssHandler=new RSSHandler();
xmlreader.setContentHandler(theRssHandler);
InputStream inPutStream = url.openStream();
InputStreamReader inPutStreamReader= new InputStreamReader(inPutStream, "utf-8");
InputSource is =new InputSource(inPutStreamReader);
xmlreader.parse(is);
return theRssHandler.getFeed();
}
catch (Exception ee)
{
return null;
}
}
以上是解析的部分代码,下面是handler代码,
public class RSSHandler extends DefaultHandler{
RSSFeed _feed;
RSSItem _item;
String _lastElementName="";
boolean bFoundChannel=false;
int currentstate=0;//不感兴趣则置为0
final int RSS_TITLE=1;
final int RSS_LINK=2;
final int RSS_DESCRIPTION=3;
final int RSS_CATEGORY=4;
final int RSS_PUBDATE=5;
int depth=0;
RSSHandler()
{
}
RSSFeed getFeed()
{
return _feed;
}
//实现sax解析
public void startDocument() throws SAXException
{
_feed= new RSSFeed();
_item= new RSSItem();
}
public void endDocument() throws SAXException
{
}
public void startElement(String namespaceURI,String localName,String qName,Attributes atts) throws SAXException
{
depth++;
if(localName.equals("channel"))
{
currentstate=0;
return;
}
/*if(localName.equals("image"))
{
_feed.setTitle(_item.getTitle());
_feed.setPubDate(_item.getPubDate());
}*/
if(localName.equals("item"))
{
_item=new RSSItem();
return;
}
if(localName.equals("title"))
{
currentstate=RSS_TITLE;
return;
}
if(localName.equals("description"))
{
currentstate=RSS_DESCRIPTION;
return;
}
if(localName.equals("link"))
{
currentstate=RSS_LINK;
return;
}
if(localName.equals("category"))
{
currentstate=RSS_CATEGORY;
return;
}
if(localName.equals("pubDate"))
{
currentstate=RSS_PUBDATE;
return;
}
currentstate=0;
}
public void endElement(String namespaceURI,String localName,String qName) throws SAXException
{
depth--;
if(localName.equals("item"))
{
_feed.addItem(_item);
return;
}
}
public void characters(char ch[],int start,int length)
{
String theString=new String(ch,start,length);
Log.i("RSSReader","characters["+theString+"]");
switch(currentstate)
{
case RSS_TITLE:
_item.setTitle(theString);
_feed.setTitle(theString);
currentstate=0;
break;
case RSS_LINK:
_item.setLink(theString);
currentstate=0;
break;
case RSS_DESCRIPTION:
_item.setDescription(theString);
currentstate=0;
break;
case RSS_CATEGORY:
_item.setCategory(theString);
currentstate=0;
break;
case RSS_PUBDATE:
_item.setPubDate(theString);
_feed.setTitle(theString);
currentstate=0;
break;
default:
return;
}
}
求解答
解决方案 »
- 多任务下载时怎么暂停某一个任务下载?
- android webview 应用启动太慢
- 在学习contentProvider的时候遇到错误:Failed to find provider info for wyq.EX09_3.Db_People
- 做音乐播放器的时候出现Unable to resync. Signalling end of stream
- android 使用sqlite 无法创建表,不知道问题在哪,很急,在线等。
- 菜鸟求问!!!!一个五子棋游戏的问题???
- Activity之间数据交换跳转不了系统不报错 求大神帮助
- Android编译错误,求解决方案
- Androidstudio 为什么只能创建java程序了
- 音乐播放安卓
- Android系统如何获取手机分辨率
- 新浪微博、腾讯微博android上是采用的什么布局格式
这样试一下
参数可以看出,有每次读取的长度和起始位置。希望我的评论对您有所帮助