class RSSHandler extendsDefaultHandler {privateContext mContext;privateRSSItem mRSSItem;privateRSSDBInterface mRSSDBInterface;private final int TITLE_STATE = 1;int AUTHOR_STATE = 2;int LINK_STATE = 3;int DESCRIPTION_STATE = 4;int CATEGORY_STATE = 5;int PUBDATE_STATE = 6;标记当前节点
intcurrentState;publicRSSHandler(Context ctx){
mContext=ctx;初始化当前节点标记为0
currentState = 0;RSSDBInterface = newRSSDBInterface(mContext);
}开始解析文档
mRSSItem = newRSSItem();
}开始解析节点
if (localName.equals("channel")){return;
}if (localName.equals("item")){当遇到一个item节点时,就实例化一个RSSItem对象
mRSSItem = newRSSItem();return;
}if (localName.equals("title")){
currentState=TITLE_STATE;if (localName.equals("author")){
currentState=AUTHOR_STATE;if (localName.equals("description")){
currentState=DESCRIPTION_STATE;if (localName.equals("link")){
currentState=LINK_STATE;if (localName.equals("category")){
currentState=CATEGORY_STATE;if (localName.equals("pubDate")){
currentState=PUBDATE_STATE;return;
}
}这是节点解析完成时调用的,这里我们遇到item的时候才调用下面的
if(localName.equals("item" && mRSSItem != null)){
ContentValues values= newContentValues();
values.put(RSSDBInfo.Columns._TITLE,mRSSItem.getTitle());
values.put(RSSDBInfo.Columns._AUTHOR,mRSSItem.getAuthor());
values.put(RSSDBInfo.Columns._CATEGORY,mRSSItem.getCategory());
values.put(RSSDBInfo.Columns._DESCRIPTION,mRSSItem.getDescription());
values.put(RSSDBInfo.Columns._LINK,mRSSItem.getLink());
values.put(RSSDBInfo.Columns._PUBDATE,mRSSItem.getPubdate());
values.put(RSSDBInfo.Columns._ISREAD,RSSUtils.ARTICALE_UNREAD);
mRSSDBInterface.insertRSStoDB(values);
}
}intlength) {
String theString= newString(ch,start,length);switch(currentState){caseTITLE_STATE:
mRSSItem.setTitle(theString);
currentState= 0;break;caseAUTHOR_STATE:
mRSSItem.setAuthor(theString);
currentState= 0;caseLINK_STATE:
mRSSItem.setLink(theString);
currentState= 0;caseDESCRIPTION_STATE:
mRSSItem.setDescription(theString);
currentState= 0;caseCATEGORY_STATE:
mRSSItem.setCategory(theString);
currentState= 0;casePUBDATE_STATE:
mRSSItem.setPubdate(theString);
currentState= 0;break;
}
}
}