android从服务器上下载文件详解.docx
《android从服务器上下载文件详解.docx》由会员分享,可在线阅读,更多相关《android从服务器上下载文件详解.docx(17页珍藏版)》请在冰豆网上搜索。
android从服务器上下载文件详解
Android从服务上下载文件
首先在电脑上配置tomcat,webapps目录下新建mp3文件夹,
截图
首先我们通过SAX解析resources.xml获取歌曲信息。
启动Tomcat访问一下服务器地址http:
//210.**.**.**:
8080/mp3/resources.xml
210.**.**.**是我的IP,把这里改成自己的IP
本来下载是一个耗时的东西,需要另外开启一个线程或则service去下载,由于这里就在本人的电脑上测试
就在主线程中下载了
Info.java
packagerw.down;
publicclassInfo{
intid;
StringnameString;
/**
*@returntheid
*/
publicintgetId(){
returnid;
}
/**
*@paramidtheidtoset
*/
publicvoidsetId(intid){
this.id=id;
}
/**
*@returnthenameString
*/
publicStringgetNameString(){
returnnameString;
}
/**
*@paramnameStringthenameStringtoset
*/
publicvoidsetNameString(StringnameString){
this.nameString=nameString;
}
/*(non-Javadoc)
*@seejava.lang.Object#toString()
*/
@Override
publicStringtoString(){
return"info[id="+id+",nameString="+nameString+"]";
}
}
infoHandle.java
packagerw.down;
importjava.util.List;
importorg.xml.sax.Attributes;
importorg.xml.sax.SAXException;
importorg.xml.sax.helpers.DefaultHandler;
importAndroid.util.Log;
publicclassinfoHandleextendsDefaultHandler{
privateInfoMp3_info;
privateListList_Mp3_Infos;
privateStringpreString;
publicinfoHandle(){
super();
}
publicinfoHandle(Listlist_Mp3_Infos){
super();
List_Mp3_Infos=list_Mp3_Infos;
}
@Override
publicvoidstartDocument()throwsSAXException{
//TODOAuto-generatedmethodstub
super.startDocument();
}
@Override
publicvoidstartElement(Stringuri,StringlocalName,StringqName,
Attributesattributes)throwsSAXException{
//TODOAuto-generatedmethodstub
preString=localName;
if(preString.equals("resource")){
Mp3_info=newInfo();
}
super.startElement(uri,localName,qName,attributes);
}
publicvoidendElement(Stringuri,StringlocalName,StringqName)
throwsSAXException{
//TODOAuto-generatedmethodstub
preString="";
Log.i("endElement_localName-------->",localName);
if(localName.equals("resource")){
List_Mp3_Infos.add(Mp3_info);
}
super.endElement(uri,localName,qName);
}
@Override
publicvoidcharacters(char[]ch,intstart,intlength)
throwsSAXException{
//TODOAuto-generatedmethodstub
StringdateString;
dateString=newString(ch,start,length);
if(preString.equals("id")){
Mp3_info.setId(Integer.parseInt(dateString));
Log.i("id--------->",dateString);
}elseif(preString.equals("mp3.name")){
Mp3_info.setNameString(dateString);
Log.i("mp3.name--------->",dateString);
}
super.characters(ch,start,length);
}
@Override
publicvoidendDocument()throwsSAXException{
//TODOAuto-generatedmethodstub
super.endDocument();
}
}
DonwnFileActivity.java
packagerw.down;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
import.HttpURLConnection;
import.MalformedURLException;
import.URL;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importjavax.xml.parsers.ParserConfigurationException;
importjavax.xml.parsers.SAXParser;
importjavax.xml.parsers.SAXParserFactory;
importorg.apache.http.HttpConnection;
importorg.apache.http.message.BufferedHeader;
importorg.xml.sax.InputSource;
importorg.xml.sax.SAXException;
importorg.xml.sax.XMLReader;
importorg.xmlpull.v1.XmlPullParser;
importorg.xmlpull.v1.XmlPullParserException;
importorg.xmlpull.v1.XmlPullParserFactory;
importandroid.app.Activity;
importandroid.app.ProgressDialog;
importandroid.content.Intent;
importandroid.content.res.AssetManager.AssetInputStream;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.util.Log;
importandroid.view.MenuItem;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.AdapterView;
importandroid.widget.AdapterView.OnItemClickListener;
importandroid.widget.ArrayAdapter;
importandroid.widget.Button;
importandroid.widget.ListAdapter;
importandroid.widget.ListView;
importandroid.widget.SimpleAdapter;
importandroid.widget.TextView;
importandroid.widget.Toast;
publicclassDownFileActivityextendsActivity{
/**Calledwhentheactivityisfirstcreated.*/
privateButtonbutton;
privateListViewlistView;
privateListlist=newArrayList();
privateArrayAdapteradapter1;
privateListmusicnameList;
privateIntentservice;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
service=newIntent(this,DownService.class);
button=(Button)findViewById(R.id.button1);
listView=(ListView)findViewById(R.id.listView1);
button.setOnClickListener(newMybutton());
}
classMybuttonimplementsOnClickListener{
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
button.setText("刷新列表");
musicnameList=newArrayList();
ListlInfos=parseXML();
list.clear();
adapter1=newArrayAdapter(getApplicationContext(),android.R.layout.simple_list_item_1,list);
listView.setAdapter(adapter1);
for(Iteratoriterator=lInfos.iterator();iterator.hasNext();){
Infoinfo=(Info)iterator.next();
musicnameList.add(info.getNameString());
list.add(info.getId()+""+info.getNameString());
}
adapter1=newArrayAdapter(getApplicationContext(),android.R.layout.simple_list_item_1,list);
listView.setAdapter(adapter1);
listView.setOnItemClickListener(newItemLitener());
}
}
privateListparseXML()
{
Listinfos=null;
SAXParserFactoryfactory=SAXParserFactory.newInstance();
try{
URLurl=newURL("http:
//210.30.12.34:
8080/mp3/resources.xml");
HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();
if(connection.getReadTimeout()==4){
Toast.makeText(getApplicationContext(),"请求超时",Toast.LENGTH_LONG).show();
returnnull;
}
InputStreaminputStream2=connection.getInputStream();
SAXParserparser=factory.newSAXParser();
XMLReaderreader=parser.getXMLReader();
infos=newArrayList();
reader.setContentHandler(newinfoHandle(infos));
reader.parse(newInputSource(inputStream2));
}catch(ParserConfigurationExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(SAXExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(MalformedURLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returninfos;
}
privateclassItemLitenerimplementsOnItemClickListener{
@Override
publicvoidonItemClick(AdapterView
>arg0,Viewarg1,intarg2,longarg3){
//TODOAuto-generatedmethodstub
Toast.makeText(getApplicationContext(),musicnameList.get(arg2).toString(),Toast.LENGTH_LONG).show();
StringdownUrlString="http:
//210.30.12.34:
8080/mp3/"+musicnameList.get(arg2).toString();
StringsdcardSave="DownFile";
Stringfilename=musicnameList.get(arg2).toString();
OutputStreamoutputStream=null;
HttpURLConnectionconnection;
/*
*1.在AndroidMainfest.xml中进行权限配置
*name="android.permission.WRITE_EXTERNAL_STORAGE"/>
*取得写入SDCard的权限
*2.取得SDCard的路径:
Environment.getExternalStorageDirectory()
*3.检查要保存的文件上是否已经存在
*4.不存在,新建文件夹,新建文件
*5.将input流中的信息写入SDCard
*6.关闭流
*/
StringSDcardPath=Environment.getExternalStorageDirectory()+"";
StringpathString=SDcardPath+"/"+sdcardSave+"/"+filename;
Filefile=newFile(pathString);
startService(service);
try{
connection=(HttpURLConnection)newURL(downUrlString).openConnection();
InputStreaminputStream=connection.getInputStream();
if(!
file.exists()){
newFile(SDcardPath+"/"+sdcardSave).mkdir();
}
File[]filelist=newFile(SDcardPath+"/"+sdcardSave).listFiles();
for(inti=0;iif(filelist[i].getName().equals(filename)){
Toast.makeText(getApplicationContext(),filename+"已经存在",Toast.LENGTH_LONG).show();
return;
}
}
file.createNewFile();
System.err.println("开始下载");
outputStream=newFileOutputStream(file);
byte[]buffer=newbyte[4*1024];
while((inputStream.read(buffer))!
=-1){
outputStream.write(buffer);
}
outputStream.flush();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
try{
outputStream.close();
Toast.makeText(getApplicationContext(),"下载成功",Toast.LENGTH_LONG).show();
System.err.println("下载完成");
//progressDialog.dismiss();
}catch(Exceptione2){
//TODO:
handleexception
Toast.makeText(getApplicationContext(),"下载失败",Toast.LENGTH_LONG).show();
//progressDialog.cancel();
}
}
}
}
}
DownService.java
packagerw.down;
importAndroid.app.Service;
importandroid.content.Intent;
importandroid.os.IBinder;
importandroid.widget.Toast;
publicclassDownServiceextendsService{
@Override
publicIBinderonBind(Intentarg0){
//TODOAuto-generatedmethodstub
returnnull;
}
publicvoidonCreate(){
//TODOAuto-generatedmethodstub
super.onCreate();
}
publicvoidonDestroy(){
//TODOAuto-generatedmethodstub
super.onDestroy();
}
publicvoidonStart(Intentintent,intstartId){
//TODOAuto-generatedmethodstub
Toast.makeText(getApplicationContext