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.HashMap;
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);
updateListView();
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(UPDATE == item.getItemId()){
updateListView();
}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 SimpleAdapter buildSimpleAdapter(List<Mp3Info> mp3Infos){
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
HashMap<String, String> map = new HashMap<String, String>();
map.put("mp3_name", mp3Info.getMp3Name());
map.put("mp3_size", mp3Info.getMp3Size());
list.add(map);
}
SimpleAdapter simpleAdapture = new SimpleAdapter(this, list,
R.layout.mp3info_item, new String[] { "mp3_name",
"mp3_size" }, new int[] { R.id.mp3_name,
R.id.mp3_size });
return simpleAdapture;
}
private void updateListView(){
String xml = downloaderXML("http://121.49.87.4:8080/mp3/resources.xml");
List<Mp3Info> mp3Infos = parse(xml);
SimpleAdapter simpleAdapture = buildSimpleAdapter(mp3Infos);
setListAdapter(simpleAdapture);
}
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;
}
}
只是修改了这么一个类
增加了显示目录的功能,就是刷新成功。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:paddingTop="1dip"
android:paddingBottom="1dip"
>
<TextView android:id="@+id/mp3_name"
android:layout_height="30dip"
android:layout_width="180dip"
android:textSize="10pt"/>
<TextView android:id="@+id/mp3_size"
android:layout_height="30dip"
android:layout_width="180dip"
android:textSize="10pt"/>
</LinearLayout>