M播放器项目实践Word文件下载.docx
- 文档编号:17294764
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:49
- 大小:35.62KB
M播放器项目实践Word文件下载.docx
《M播放器项目实践Word文件下载.docx》由会员分享,可在线阅读,更多相关《M播放器项目实践Word文件下载.docx(49页珍藏版)》请在冰豆网上搜索。
在类中,元素的ID最好定义一个常量来代替实际的int型数据,以便修改。
如:
UPDATEABOUT
2、创建HttpDownloader类,实现xml文本文件的下载功能:
import.*;
importjava.io.*;
publicclassHttpDownloader{
publicInputStreamgetInput(URLurl){
HttpURLConnectionhttpconn=null;
InputStreaminput=null;
try{
httpconn=(HttpURLConnection)url.openConnection();
input=httpconn.getInputStream();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returninput;
publicStringtextDownload(StringurlStr){
URLurl;
StringBuffersb=newStringBuffer();
Stringline=null;
BufferedReaderbuffer=null;
url=newURL(urlStr);
input=getInput(url);
buffer=newBufferedReader(newInputStreamReader(input,"
gb2312"
));
while((line=buffer.readLine())!
=null){
sb.append(line);
}
//注意:
此处一定要用一个line进行append,否则会读取数据不完整
记得将InputStreamReader中的编码设置为"
,否则不可读取中文
}catch(Exceptione){
}finally{
try{
buffer.close();
}catch(Exceptione){
e.printStackTrace();
returnsb.toString();
}
要在AndroidManifest中添加访问internet的权限:
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){
this.id=id;
this.mp3Name=mp3Name;
this.mp3Size=mp3Size;
this.lrcName=lrcName;
this.lrcSize=lrcSize;
publicStringgetId(){
returnid;
publicvoidsetId(Stringid){
publicStringgetMp3Name(){
returnmp3Name;
publicvoidsetMp3Name(Stringmp3Name){
publicStringgetMp3Size(){
returnmp3Size;
publicvoidsetMp3Size(Stringmp3Size){
publicStringgetLrcName(){
returnlrcName;
publicvoidsetLrcName(StringlrcName){
publicStringgetLrcSize(){
returnlrcSize;
publicvoidsetLrcSize(StringlrcSize){
@Override
publicStringtoString(){
return"
Mp3Info[id="
+id+"
mp3Name="
+mp3Name+"
mp3Size="
+mp3Size+"
lrcName="
+lrcName+"
lrcSize="
+lrcSize
+"
]"
;
}
注意点:
在编程中,对于这种专门用于存储某种实体对象的属性的类,都可用上面这种方法进行处理:
①将每个属性定义为一个私有变量;
②利用eclipse自动生成get函数、set函数和构造函数的功能,生成所需函数
③利用eclipse自动生成toString函数,以便调试使用
5、创建Mp3ListContentHandler类,以便设置SAX解析时的Handler:
publicclassMp3ListContentHandlerextendsDefaultHandler{
privateMp3Infomp3info=null;
privateList<
Mp3Info>
infos=null;
//用于存放各个的Mp3对象
privateStringtagName=null;
publicList<
getInfos(){
returninfos;
publicvoidsetInfos(List<
infos){
this.infos=infos;
publicMp3ListContentHandler(List<
publicvoidcharacters(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);
mp3.size"
mp3info.setMp3Size(temp);
lrc.name"
mp3info.setLrcName(temp);
lrc.size"
mp3info.setLrcSize(temp);
//每解析到<
的endElement时,表示一个Mp3对象解析完成,故将这个mp3info对象放到infos中
publicvoidendElement(Stringuri,StringlocalName,StringqName)
if(localName.equals("
resource"
infos.add(mp3info);
tagName="
"
//每解析到一个<
的startElement时候,表示一个新的Mp3对象将被解析到,故创建新的Mp3Info对象来存储Mp3对象
publicvoidstartElement(Stringuri,StringlocalName,StringqName,
Attributesattributes)throwsSAXException{
tagName=localName;
mp3info=newMp3Info();
}
publicvoidendDocument()throwsSAXException{
//TODOAuto-generatedmethodstub
super.endDocument();
publicvoidstartDocument()throwsSAXException{
super.startDocument();
6、在Mp3ListActivity类中添加解析xml的方法:
parse(StringxmlStr){
SAXParserFactoryfactory=SAXParserFactory.newInstance();
XMLReaderreader;
List<
infos=null;
reader=factory.newSAXParser().getXMLReader();
infos=newArrayList<
();
Mp3ListContentHandlermp3listhandler=newMp3ListContentHandler(infos);
reader.setContentHandler(mp3listhandler);
reader.parse(newInputSource(newStringReader(xmlStr)));
//使用迭代器Iterator遍历infos中的各个Mp3对象,快捷键:
输入for以后//按下alt+/
for(Iteratoriterator=infos.iterator();
iterator.hasNext();
){
Mp3Infomp3info=(Mp3Info)iterator.next();
}catch(SAXExceptione){
}catch(ParserConfigurationExceptione){
}
7、调用上述方法和各个类,实现点击更新列表按钮来读取服务器中resources.xml文件中各个Mp3信息的功能,在Mp3ListActivity类中添加以下两个方法:
publicbooleanonOptionsItemSelected(MenuItemitem){
if(item.getItemId()==UPDATE){
parse(xml);
elseif(item.getItemId()==ABOUT){
//点击关于
returnsuper.onOptionsItemSelected(item);
privateStringdownloadXML(StringurlStr){
HttpDownloaderhttpdownloader=newHttpDownloader();
Stringresult=httpdownloader.textDownload(urlStr);
returnresult;
8、利用ListView的知识,将得到的mp3infos的相关信息显示在ListActivity中。
在Mp3ListActivity类的点击更新列表的相应事件中添加如下代码。
另外,新建main.xml和mp3info_item.xml来布局ListActivity
//点击更新列表
List<
infos;
ArrayList<
HashMap<
String,String>
>
list=newArrayList<
infos=parse(xml);
Mp3Infomp3Info=(Mp3Info)iterator.next();
HashMap<
mp3=newHashMap<
mp3.put("
mp3_name"
mp3Info.getMp3Name());
mp3_size"
mp3Info.getMp3Size());
list.add(mp3);
SimpleAdaptersimple=
newSimpleAdapter(this,list,
{"
"
},newint[]
setListAdapter(simple);
Main.xml:
?
xmlversion="
1.0"
encoding="
utf-8"
android:
orientation="
vertical"
layout_width="
fill_parent"
layout_height="
>
<
ListView
id="
@android:
id/list"
android:
wrap_content"
drawSelectorOnTop="
false"
/>
/LinearLayout>
Mp3info_item.xml:
horizontal"
paddingLeft="
10dip"
paddingRight="
paddingTop="
1dip"
paddingBottom="
TextView
@+id/mp3_name"
30dip"
textSize="
10pt"
@+id/mp3_size"
gravity="
right"
编程思想:
实现相应的功能只是很小的一部分,对代码进行重构是很重要的一部分工作!
重构:
提高代码的可复用性,减少重复性代码,提高代码的可扩展性,以便以后代码的修改和功能的扩展。
函数越小越好!
重构Mp3ListActivity类中的函数,将回调函数中繁杂的功能实现函数封装成单独的函数,在回调函数中直接调用,最终得到Mp3ListActivity类的代码如下:
importjava.util.*;
importjavax.xml.*;
publicclassMp3ListActivityextendsListActivity{
privatestaticfinalintUPDATE=1;
privatestaticfinalintABOUT=2;
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
updateListView();
publicbooleanonCreateOptionsMenu(Menumenu){
privateSimpleAdapterbuildSimpleAdapter(List<
mp3infos){
ArrayList<
for(Iteratoriterator=mp3infos.iterator();
Mp3Infomp3Info=(Mp3Info)iterator.next();
HashMap<
mp3.put("
list.add(mp3);
SimpleAdaptersimple=
newSimpleAdapter(this,list,
{"
returnsimple;
privatevoidupdateListView(){
//注意:
1、tomcat服务器中文件放置:
在webapps下新建Mp3文件,在Mp3文件中新建配置文件WEB-INF
//在Mp3文件中放置
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 播放 项目 实践