您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Mp3播放器项目实践
Mp3播放器项目项目功能简介:环境配置:服务器:tomcatXML文件:resources.xml(用来记录服务器中所有歌曲信息)Mp3文件和LRC文件1、将resources.xml文件、Mp3文件和LRC文件都放置到tomcat-----webapps----Mp3.2、在tomcat-----webapps----Mp3中建立WEB-INF文件夹(添加配置文件web.xml)3、在eclipse中启动tomcat,并在浏览器中实验是否能正确访问到以上文件()注意:每次启动eclipse后要运行这个程序的话,别忘了启动tomcat啊!否则读取不了服务器中的Mp3列表的。第一集:实现Mp3文件列表的显示--------点击menu-------出现更新列表按钮,点击更新列表按钮,可以显示服务器中所有的歌曲信息功能分解:1、menu按钮显示2、从服务器下载resources.xml3、用SAX方法解析resources.xml:①ContentHandler类的设计;②SAX解析;功能实现:1、创建类Mp3ListActivity重写回调函数publicbooleanonCreateOptionsMenu(Menumenu){}实现menu按钮显示功能:publicbooleanonCreateOptionsMenu(Menumenu){menu.add(0,UPDATE,1,R.string.mp3list_update);menu.add(0,ABOUT,2,R.string.mp3list_about);returnsuper.onCreateOptionsMenu(menu);}注意点:在类中,元素的ID最好定义一个常量来代替实际的int型数据,以便修改。如:UPDATEABOUT2、创建HttpDownloader类,实现xml文本文件的下载功能:importjava.net.*;importjava.io.*;importorg.apache.http.HttpConnection;publicclassHttpDownloader{publicInputStreamgetInput(URLurl){HttpURLConnectionhttpconn=null;InputStreaminput=null;try{httpconn=(HttpURLConnection)url.openConnection();input=httpconn.getInputStream();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returninput;}publicStringtextDownload(StringurlStr){URLurl;InputStreaminput=null;StringBuffersb=newStringBuffer();Stringline=null;BufferedReaderbuffer=null;try{url=newURL(urlStr);input=getInput(url);buffer=newBufferedReader(newInputStreamReader(input,gb2312));while((line=buffer.readLine())!=null){sb.append(line);}//注意:此处一定要用一个line进行append,否则会读取数据不完整//注意:记得将InputStreamReader中的编码设置为gb2312,否则不可读取中文}catch(Exceptione){e.printStackTrace();}finally{try{buffer.close();}catch(Exceptione){e.printStackTrace();}}returnsb.toString();}}注意:要在AndroidManifest中添加访问internet的权限:uses-permissionandroid:name=android.permission.INTERNET/uses-permissionandroid:name=android.permission.WRITE_EXTERNAL_STORAGE/3、创建Mp3ListContentHandler类,实现ContentHandler类的设计,以便xml的解析用。4、在解析resources.xml时,将每一个Mp3看做一个对象,即:resource..../resource之间子元素是这个Mp3对象中的私有变量。因此还需要创建一个Mp3Info类,以实现在xml文件解析过程中对每个Mp3的属性进行存储:publicclassMp3Info{privateStringid;privateStringmp3Name;privateStringmp3Size;privateStringlrcName;privateStringlrcSize;/***直接右击然后source选择生成get和set方法以及toString方法以及构造函数(带参数和不带参数的构造函数)*@return*/publicMp3Info(){super();}publicMp3Info(Stringid,Stringmp3Name,Stringmp3Size,StringlrcName,StringlrcSize){super();this.id=id;this.mp3Name=mp3Name;this.mp3Size=mp3Size;this.lrcName=lrcName;this.lrcSize=lrcSize;}publicStringgetId(){returnid;}publicvoidsetId(Stringid){this.id=id;}publicStringgetMp3Name(){returnmp3Name;}publicvoidsetMp3Name(Stringmp3Name){this.mp3Name=mp3Name;}publicStringgetMp3Size(){returnmp3Size;}publicvoidsetMp3Size(Stringmp3Size){this.mp3Size=mp3Size;}publicStringgetLrcName(){returnlrcName;}publicvoidsetLrcName(StringlrcName){this.lrcName=lrcName;}publicStringgetLrcSize(){returnlrcSize;}publicvoidsetLrcSize(StringlrcSize){this.lrcSize=lrcSize;}@OverridepublicStringtoString(){returnMp3Info[id=+id+,mp3Name=+mp3Name+,mp3Size=+mp3Size+,lrcName=+lrcName+,lrcSize=+lrcSize+];}}注意点:在编程中,对于这种专门用于存储某种实体对象的属性的类,都可用上面这种方法进行处理:①将每个属性定义为一个私有变量;②利用eclipse自动生成get函数、set函数和构造函数的功能,生成所需函数③利用eclipse自动生成toString函数,以便调试使用5、创建Mp3ListContentHandler类,以便设置SAX解析时的Handler:importjava.util.List;importliu.model.Mp3Info;importorg.xml.sax.Attributes;importorg.xml.sax.SAXException;importorg.xml.sax.helpers.DefaultHandler;publicclassMp3ListContentHandlerextendsDefaultHandler{privateMp3Infomp3info=null;privateListMp3Infoinfos=null;//用于存放各个的Mp3对象privateStringtagName=null;publicListMp3InfogetInfos(){returninfos;}publicvoidsetInfos(ListMp3Infoinfos){this.infos=infos;}publicMp3ListContentHandler(ListMp3Infoinfos){super();this.infos=infos;}@Overridepublicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{Stringtemp=newString(ch,start,length);if(tagName.equals(id)){mp3info.setId(temp);}elseif(tagName.equals(mp3.name)){mp3info.setMp3Name(temp);}elseif(tagName.equals(mp3.size)){mp3info.setMp3Size(temp);}elseif(tagName.equals(lrc.name)){mp3info.setLrcName(temp);}elseif(tagName.equals(lrc.size)){mp3info.setLrcSize(temp);}}//每解析到/resource的endElement时,表示一个Mp3对象解析完成,故将这个mp3info对象放到infos中@OverridepublicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{if(localName.equals(resource)){infos.add(mp3info);}tagName=;}@Override//每解析到一个resource的startElement时候,表示一个新的Mp3对象将被解析到,故创建新的Mp3Info对象来存储Mp3对象publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)throwsSAXException{tagName=localName;if(tagName.equals(resource)){mp3info=newMp3Info();}}@OverridepublicvoidendDocument()throwsSAXException{//TODOAuto-generatedmethodstubsuper.endDocument();}@OverridepublicvoidstartDocument()throwsSAXException{//TODOAuto-generatedmethodstubsuper.startDocument();}}6、在Mp3ListActivity类中添加解析xml的方法:privateListMp3Infoparse(StringxmlStr){SAXParserFactoryfactory=SAXParserFactory.newInstance();XMLReaderreader;ListMp3Infoinfos=null;try{reader=factory.newSAXParser().getXMLReader();infos=newArrayListMp3In
本文标题:Mp3播放器项目实践
链接地址:https://www.777doc.com/doc-754733 .html