首先在电脑上配置tomcat,webapps目录下新建mp3文件夹,
截图
首先我们通过SAX解析resources.xml 获取歌曲信息。
启动 Tomcat访问一下服务器地址http://210.**.**.**:8080/mp3/resources.xml
210.**.**.**是我的IP,把这里改成自己的IP
本来下载是一个耗时的东西,需要另外开启一个线程或则service去下载,由于这里就在本人的电脑上测试
就在主线程中下载了
Info.java
- package rw.down;
- public class Info {
- int id;
- String nameString;
- /**
- * @return the id
- */
- public int getId() {
- return id;
- }
- /**
- * @param id the id to set
- */
- public void setId(int id) {
- this.id = id;
- }
- /**
- * @return the nameString
- */
- public String getNameString() {
- return nameString;
- }
- /**
- * @param nameString the nameString to set
- */
- public void setNameString(String nameString) {
- this.nameString = nameString;
- }
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- return "info [id=" + id + ", nameString=" + nameString + "]";
- }
- }
infoHandle.java
- package rw.down;
- import java.util.List;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- import android.util.Log;
- public class infoHandle extends DefaultHandler {
- private Info Mp3_info;
- private List<Info> List_Mp3_Infos;
- private String preString;
- public infoHandle() {
- super();
- }
- public infoHandle(List<Info> list_Mp3_Infos) {
- super();
- List_Mp3_Infos = list_Mp3_Infos;
- }
- @Override
- public void startDocument() throws SAXException {
- // TODO Auto-generated method stub
- super.startDocument();
- }
- @Override
- public void startElement(String uri, String localName, String qName,
- Attributes attributes) throws SAXException {
- // TODO Auto-generated method stub
- preString=localName;
- if (preString.equals("resource")) {
- Mp3_info=new Info();
- }
- super.startElement(uri, localName, qName, attributes);
- }
- public void endElement(String uri, String localName, String qName)
- throws SAXException {
- // TODO Auto-generated method stub
- preString=" ";
- Log.i("endElement_localName-------->", localName);
- if (localName.equals("resource")) {
- List_Mp3_Infos.add(Mp3_info);
- }
- super.endElement(uri, localName, qName);
- }
- @Override
- public void characters(char[] ch, int start, int length)
- throws SAXException {
- // TODO Auto-generated method stub
- String dateString;
- dateString=new String(ch, start, length);
- if (preString.equals("id")) {
- Mp3_info.setId(Integer.parseInt(dateString));
- Log.i("id--------->", dateString);
- }else if (preString.equals("mp3.name")) {
- Mp3_info.setNameString(dateString);
- Log.i("mp3.name--------->", dateString);
- }
- super.characters(ch, start, length);
- }
- @Override
- public void endDocument() throws SAXException {
- // TODO Auto-generated method stub
- super.endDocument();
- }
- }
DonwnFileActivity.java
- package rw.down;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- import org.apache.http.HttpConnection;
- import org.apache.http.message.BufferedHeader;
- import org.xml.sax.InputSource;
- import org.xml.sax.SAXException;
- import org.xml.sax.XMLReader;
- import org.xmlpull.v1.XmlPullParser;
- import org.xmlpull.v1.XmlPullParserException;
- import org.xmlpull.v1.XmlPullParserFactory;
- import android.app.Activity;
- import android.app.ProgressDialog;
- import android.content.Intent;
- import android.content.res.AssetManager.AssetInputStream;
- import android.os.Bundle;
- import android.os.Environment;
- import android.util.Log;
- import android.view.MenuItem;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.ListAdapter;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- import android.widget.TextView;
- import android.widget.Toast;
- public class DownFileActivity extends Activity {
- /** Called when the activity is first created. */
- private Button button;
- private ListView listView;
- private List<String> list=new ArrayList<String>();
- private ArrayAdapter<String> adapter1;
- private List<String> musicnameList;
- private Intent service;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- service=new Intent(this,DownService.class);
- button=(Button) findViewById(R.id.button1);
- listView=(ListView) findViewById(R.id.listView1);
- button.setOnClickListener(new Mybutton());
- }
- class Mybutton implements OnClickListener{
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- button.setText("刷新列表");
- musicnameList=new ArrayList<String>();
- List<Info> lInfos=parseXML();
- list.clear();
- adapter1 =new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, list);
- listView.setAdapter(adapter1);
- for (Iterator iterator = lInfos.iterator(); iterator.hasNext();) {
- Info info = (Info) iterator.next();
- musicnameList.add(info.getNameString());
- list.add(info.getId()+" "+info.getNameString());
- }
- adapter1 =new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, list);
- listView.setAdapter(adapter1);
- listView.setOnItemClickListener(new ItemLitener());
- }
- }
- private List<Info> parseXML()
- {
- List<Info> infos=null;
- SAXParserFactory factory=SAXParserFactory.newInstance();
- try {
- URL url=new URL("http://210.30.12.34:8080/mp3/resources.xml");
- HttpURLConnection connection=(HttpURLConnection) url.openConnection();
- if (connection.getReadTimeout()==4) {
- Toast.makeText(getApplicationContext(), "请求超时", Toast.LENGTH_LONG).show();
- return null;
- }
- InputStream inputStream2=connection.getInputStream();
- SAXParser parser=factory.newSAXParser();
- XMLReader reader=parser.getXMLReader();
- infos=new ArrayList<Info>();
- reader.setContentHandler(new infoHandle(infos));
- reader.parse(new InputSource(inputStream2));
- } catch (ParserConfigurationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SAXException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return infos;
- }
- private class ItemLitener implements OnItemClickListener{
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
- // TODO Auto-generated method stub
- Toast.makeText( getApplicationContext(), musicnameList.get(arg2).toString(), Toast.LENGTH_LONG).show();
- String downUrlString="http://210.30.12.34:8080/mp3/"+musicnameList.get(arg2).toString();
- String sdcardSave="DownFile";
- String filename=musicnameList.get(arg2).toString();
- OutputStream outputStream=null;
- HttpURLConnection connection;
- /*
- * 1.在AndroidMainfest.xml中进行权限配置
- * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- * 取得写入SDCard的权限
- * 2.取得SDCard的路径: Environment.getExternalStorageDirectory()
- * 3.检查要保存的文件上是否已经存在
- * 4.不存在,新建文件夹,新建文件
- * 5.将input流中的信息写入SDCard
- * 6.关闭流
- */
- String SDcardPath=Environment.getExternalStorageDirectory()+"";
- String pathString=SDcardPath+"/"+sdcardSave+"/"+filename;
- File file=new File(pathString);
- startService(service);
- try {
- connection = (HttpURLConnection) new URL(downUrlString).openConnection();
- InputStream inputStream=connection.getInputStream();
- if (!file.exists()) {
- new File(SDcardPath+"/"+sdcardSave).mkdir();
- }
- File[] filelist=new File(SDcardPath+"/"+sdcardSave).listFiles();
- for (int i = 0; i < filelist.length; i++) {
- if (filelist[i].getName().equals(filename)) {
- Toast.makeText(getApplicationContext(), filename+"已经存在", Toast.LENGTH_LONG).show();
- return ;
- }
- }
- file.createNewFile();
- System.err.println("开始下载");
- outputStream=new FileOutputStream(file);
- byte[] buffer=new byte[4*1024];
- while ((inputStream.read(buffer))!=-1) {
- outputStream.write(buffer);
- }
- outputStream.flush();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- try {
- outputStream.close();
- Toast.makeText(getApplicationContext(), "下载成功", Toast.LENGTH_LONG).show();
- System.err.println("下载完成");
- //progressDialog.dismiss();
- } catch (Exception e2) {
- // TODO: handle exception
- Toast.makeText(getApplicationContext(), "下载失败", Toast.LENGTH_LONG).show();
- //progressDialog.cancel();
- }
- }
- }
- }
- }
DownService.java
- package rw.down;
- import android.app.Service;
- import android.content.Intent;
- import android.os.IBinder;
- import android.widget.Toast;
- public class DownService extends Service {
- @Override
- public IBinder onBind(Intent arg0) {
- // TODO Auto-generated method stub
- return null;
- }
- public void onCreate() {
- // TODO Auto-generated method stub
- super.onCreate();
- }
- public void onDestroy() {
- // TODO Auto-generated method stub
- super.onDestroy();
- }
- public void onStart(Intent intent, int startId) {
- // TODO Auto-generated method stub
- Toast.makeText(getApplicationContext(), "服务开始", Toast.LENGTH_LONG).show();
- super.onStart(intent, startId);
- }
- }
在AndroidManifest.xml中添加两个权限
- <uses-permission android:name="android.permission.INTERNET"></uses-permission>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
和一个服务
- <service android:name="DownService"></service>
效果,因为我已经运行过了,因为我已经运行过了,所以DownFile这个文件已经存在,第一次运行是回创建这个文件夹
通过ls命令 我们看见 现在文件夹里面什么也没有
点击我们要下载的歌曲,我现在点击Beyond.mo3
如果下载成功
如果没有找到这个歌曲,会提示下载失败
现在我们再来看看DownFile这个文件夹下面