实现了从服务器当中下载XML文件并且解析XML文件。
package guoximing.download;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
//看的出来 IOException 是MalformedURLException 的父类
public class HttpDownloader {
private URL url = null;
public String download(String urlStr) {
StringBuffer sb = new StringBuffer();
String line = null;
BufferedReader buffer = null;
try {
// 创建一个URL对象
URL url = new URL(urlStr);
// 创建一个Http连接
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection();
// 使用IO流读取数据
buffer = new BufferedReader(new InputStreamReader(urlConn
.getInputStream()));
while ((line = buffer.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
buffer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
package guoximing.mp3player;
import guoximing.download.HttpDownloader;
import guoximing.model.Mp3Info;
import guoximing.xml.Mp3ListContentHandler;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.annotation.SuppressLint;
import android.app.ListActivity;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SimpleAdapter;
import com.example.mp3player.R;
@SuppressLint("NewApi")
public class MP3ListActivity extends ListActivity{
private static final int UPDATE = 1;
private static final int ABOUT = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
//详见StrictMode文档
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0,UPDATE,1,R.string.mp3List_update);
menu.add(0,ABOUT,2,R.string.mp3List_about);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(UPDATE == item.getItemId()){
System.out.println(UPDATE);
String str = "http://121.49.87.4:8080/mp3/resources.xml";
String xml = downloaderXML(str);
System.out.println("xml....."+xml);
parse(xml);
}else{
System.out.println(ABOUT);
}
return super.onOptionsItemSelected(item);
}
private String downloaderXML(String urlStr){
HttpDownloader httpDownloader = new HttpDownloader();
String result = null;
result = httpDownloader.download(urlStr);
return result;
}
private List<Mp3Info> parse(String xmlStr){
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
List<Mp3Info> infos = new ArrayList<Mp3Info>();
try{
XMLReader xmlReader = saxParserFactory.newSAXParser()
.getXMLReader();
Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler(
infos);
xmlReader.setContentHandler(mp3ListContentHandler);
xmlReader.parse(new InputSource(new StringReader(xmlStr)));
for (Iterator iterator = infos.iterator(); iterator.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
System.out.println(mp3Info);
}
}catch(Exception e){
}
return infos;
}
}
package guoximing.model;
public class Mp3Info {
private String id = null;
private String mp3Name = null;
private String mp3Size = null;
private String lrcName = null;
private String lrcSize = null;
public Mp3Info(String id, String mp3Name, String mp3Size, String lrcName,
String lrcSize) {
super();
this.id = id;
this.mp3Name = mp3Name;
this.mp3Size = mp3Size;
this.lrcName = lrcName;
this.lrcSize = lrcSize;
}
public Mp3Info() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMp3Name() {
return mp3Name;
}
public void setMp3Name(String mp3Name) {
this.mp3Name = mp3Name;
}
public String getMp3Size() {
return mp3Size;
}
public void setMp3Size(String mp3Size) {
this.mp3Size = mp3Size;
}
public String getLrcName() {
return lrcName;
}
public void setLrcName(String lrcName) {
this.lrcName = lrcName;
}
public String getLrcSize() {
return lrcSize;
}
public void setLrcSize(String lrcSize) {
this.lrcSize = lrcSize;
}
@Override
public String toString() {
return "Mp3Info [id=" + id + ", mp3Name=" + mp3Name + ", mp3Size="
+ mp3Size + ", lrcName=" + lrcName + ", lrcSize=" + lrcSize
+ "]";
}
}
package guoximing.xml;
import guoximing.model.Mp3Info;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Mp3ListContentHandler extends DefaultHandler{
//每一个<resource>都是一个MP3Info对象
private List<Mp3Info> infos = null;
private Mp3Info mp3Info = null;
private String tagName = null;
public Mp3ListContentHandler(List<Mp3Info> infos) {
super();
this.infos = infos;
}
public List<Mp3Info> getInfos() {
return infos;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String temp = new String(ch,start,length);
if(tagName.equals("id")){
mp3Info.setId(temp);
}
else if(tagName.equals("mp3.name")){
mp3Info.setMp3Name(temp);
}
else if(tagName.equals("mp3.size")){
mp3Info.setMp3Size(temp);
}
else if(tagName.equals("lrc.name")){
mp3Info.setLrcName(temp);
}
else if(tagName.equals("lrc.size")){
mp3Info.setLrcSize(temp);
}
super.characters(ch, start, length);
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
this.tagName = localName;
if(tagName.equals("resource")){
mp3Info = new Mp3Info();
}
super.startElement(uri, localName, qName, attributes);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(qName.equals("resource")){
infos.add(mp3Info);
}
tagName = "";
super.endElement(uri, localName, qName);
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false"
android:scrollbars="vertical" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mp3player"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="guoximing.mp3player.MP3ListActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>