网站内容更新系统 :
优采云 发布时间: 2021-08-21 06:09网站内容更新系统 :
看到这个副标题,大家应该很容易想到我的用意。是的,我们可以使用RSS订阅的内容来更新我们的内容,因为RSS订阅的内容可以每天更新,我们只需要找到与我们软件内容相关的RSS源即可。考虑 RSS 的另一个原因是,当我们请求 RSS 源地址时,服务器会返回一个 XML 文档。对于XML解析,我想大家应该都非常熟悉了。这也是一个相对简单的过程。所以,这样的条件是独一无二的。更新我们软件的相关内容不是小菜一碟吗?整个过程其实相当于完成了一个RSS阅读器,只不过我们是在后台做数据提取。所以下面我就简单的用一个demo来给大家讲解一下。我的demo是基于星座软件,可以提供每日星座运势,所以这里我只是简单的给大家展示一下,我获取了十二星座的每日内容,然后在textview中展示。
XML 解析设置
这部分内容主要是关于XML解析。因为我们是更新手机软件内容,所以需要尽量考虑手机的局限性。我们需要尽可能少地消耗内存,所以我建议选择SAX解析方式,我认为SAX解析不需要太多解释,大家都知道。请参阅以下内容:
publicclassMyHandlerextendsDefaultHandler {StringtagName; String[]horoStrings=newString[12];初始=0; /**开始解析节点,注意找到此时需要的内容的节点*/ publicvoidstartElement(Stringuri,StringlocalName,Stringname, Attributesattributes)throwsSAXException{ //TODOAuto-generatedmethodstub tagName=localName; if(localName.equals("description")) {i++;}} publicvoidcharacters(char[]ch,intstart,intlength) throwsSAXException{ //TODOAuto-generatedmethodstub /** 如果是想要的节点名,获取内容*/ System.out.println("mygod"); if(tagName.equals("description")) {horoStrings[i]=newString(ch,start,length);}} publicString[]getParseData() {returnhoroStrings;} }
简单解释一下上面,我用一个数组截取了xml中十二星座的运势。运势的内容放在节点中间,所以我要找的节点是“描述”,然后我在读取内容的时候,把需要的内容放到数组中,最后构造一个方法返回获得的数组。那么简单的分析就完成了。
发送请求获取资源
接下来我们需要向RSS源地址发送请求,获取返回的XML,然后解析:
try{ URLurl=newURL(""); SAXParserFactorysFactory=SAXParserFactory.newInstance(); XMLReaderreader=sFactory.newSAXParser().getXMLReader(); MyHandlermyHandler=newMyHandler(); reader.setContentHandler(myHandler); reader.parse(newInputSource(url.openStream())); String[]data=myHandler.getParseData(); Intentintent=newIntent(); intent.putExtra(“数据”,数据); intent.setClass(RSSreader.this,ShowHoroscopes.class); startActivity(intent);} catch(Exceptione){ //TODO:handleexception e.printStackTrace(); }
SAX解析的初始化大家应该都很熟悉了。打开xml文件流,开始解析。
多线程处理
我们知道,为了在实际操作中获得良好的用户体验,我们需要在解析过程中做双线程处理,以免让用户认为用户会被挂起,所以我们可以设置一个解析前台对话框,让用户更好地了解更新过程,如下:
mydialog=ProgressDialog.show(RSSreader.this,"进度提示","解析中..."); newThread() {publicvoidrun() {try{ URLurl=newURL(""); SAXParserFactorysFactory= SAXParserFactory.newInstance(); XMLReaderreader=sFactory.newSAXParser().getXMLReader(); MyHandlermyHandler=newMyHandler(); reader.setContentHandler(myHandler); reader.parse(newInputSource(url.openStream())); String[]data= myHandler.getParseData(); Intentintent=newIntent(); intent.putExtra(“数据”,数据); intent.setClass(RSSreader.this,ShowHoroscopes.class); startActivity(intent);} catch(Exceptione){ //TODO :handleexception e.printStackTrace();} finally{ mydialog.dismiss();}} }.start(); }
效果如图:
<IMG height=307 alt="" src="../../upload/2011_09/110925070515981.jpg" width=284>
总结
虽然这种方式不适合大部分应用软件内容更新,但是对于我们学生开发者来说,如果你想实现一个内容应用软件,没有服务器,我觉得我们可以尝试找到相关的RSS资源,然后学习通过这种方法达到我们想要的预期。