package com.gm.activity;
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.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import com.gm.model.Mp3Info;
import com.gm.mp3player.service.DownloadService;
import com.gm.xml.HttpDownloader;
import com.gm.xml.Mp3ListContentHandler;
public class RemoteMp3ListActivity extends ListActivity {
private static final int UPDATE = 1;
private static final int ABOUT = 2;
private List<Mp3Info> mp3InfoList = null;
//下载地址
private static final String URL = "http://172.16.18.123:8080/mp3/resources.xml";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.remote_mp3_list);
//使得一进入软件,就更新播放列表
updateListView();
}
/**
* 添加菜单
*/
@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);
}
/**
* 处理Menu菜单中的按钮事情监听
* @param MenuItem
* @return boolean
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//用户点击“更新”按钮,在ListView中显示所有mp3列表
if (item.getItemId() == UPDATE) {
//更新处理ListView
updateListView();
} else if (item.getItemId() == ABOUT) {
}
return super.onOptionsItemSelected(item);
}
/**
* 更新ListView的方法
*/
private void updateListView( ){
//根据指定路径,下载xml文件,并获得xml的字符串形式的内容
String xml = downloadXML(URL);
//并获得文件内容,
mp3InfoList = parse(xml);
//获得simplAdapter对象
SimpleAdapter simpleAdapter = buildSimpleAdapter(mp3InfoList);
setListAdapter(simpleAdapter);
}
/**
* 创建并获得SimpleAdapter
* @param List<Mp3Info>
* @return SimpleAdapter对象
*/
private SimpleAdapter buildSimpleAdapter(List<Mp3Info> mp3InfoList ){
//生成装载HashMap对象的List对象,按时SimpleAdapter的标准,将mp3Infos当中的数据添加到List当中去
List<HashMap<String, String>> mp3InfoHashMapList = new ArrayList<HashMap<String, String>>();
for (Iterator iterator = mp3InfoList.iterator(); iterator.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
HashMap<String,String> mp3InfoHashMap = new HashMap<String, String>();
mp3InfoHashMap.put("mp3_name", mp3Info.getMp3Name());
mp3InfoHashMap.put("mp3_size", mp3Info.getMp3Size());
mp3InfoHashMapList.add(mp3InfoHashMap);
}
//创建一个SimpleAdapter对象,ListView就是通过SimpleAdapter对象来迭代的
SimpleAdapter simpleAdapter = new SimpleAdapter(this,mp3InfoHashMapList,R.layout.mp3infoitem,new String[]{"mp3_name","mp3_size"},new int[]{R.id.mp3_name,R.id.mp3_size});
return simpleAdapter;
}
/**
* 下载XML歌曲列表文件,并以字符串形式获得xml文件内容
* @param String url地址
* @return String xml文件的内容
*/
private String downloadXML(String urlStr) {
HttpDownloader httpDownloader = new HttpDownloader();
String result = httpDownloader.download(urlStr);
return result;
}
/**
* 按照自定义的格式解析传递进来的xml内容
* @param xmlStr
* @return
*/
private List<Mp3Info> parse(String xmlStr) {
// 创建一个SAXParserFactory
SAXParserFactory mSASaxParserFactory = SAXParserFactory.newInstance();
List<Mp3Info> mp3InfoList = new ArrayList<Mp3Info>();
try {
// 获得XMLReader
XMLReader xmlReader = mSASaxParserFactory.newSAXParser()
.getXMLReader();
// 获得我们自定义的解析xml文件用的ContentHandler
Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler(
mp3InfoList);
// 为XMLReader设置内容处理器
xmlReader.setContentHandler(mp3ListContentHandler);
// 开始解析xml文件
xmlReader.parse(new InputSource(new StringReader(xmlStr)));
// 迭代遍历mp3InfoList,并输出每个Mp3Info对象中的内容
for (Iterator<Mp3Info> iterator = mp3InfoList.iterator(); iterator
.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
System.out.println("mp3 message------" + mp3Info);
}
} catch (Exception e) {
e.printStackTrace();
}
return mp3InfoList;
}
/**
* ListView 中的Item对象的点击事件监听
*/
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//根据ListView中的Item的位置号,即mp3Info在List中的编号
Mp3Info mp3Info = mp3InfoList.get(position);
//以下做的是为了使下载mp3文件的线程放到一个Service中,以防止在主线程中阻碍主线程运行
//生成Intent对象
Intent intent = new Intent();
//将Mp3Info对象存入到Intent对象中,使其传递到下一个类中
intent.putExtra("mp3Info", mp3Info);
//第一个参数是启动Intent的Activity,第二个参数是被启动的类
intent.setClass(this, DownloadService.class);
//启动Service,因为下载 Mp3的线程在Service中
startService(intent);
super.onListItemClick(l, v, position, id);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Mp3Player.rar (67个子文件)
Mp3Player
.project 845B
default.properties 362B
bin
Mp3Player.apk 221KB
com
gm
xml
HttpDownloader.class 3KB
Mp3ListContentHandler.class 3KB
model
Mp3Info.class 2KB
mp3player
utils
AppConstant$PlayerMsg.class 524B
FileUtils.class 4KB
AppConstant.class 277B
AppConstant$URL.class 489B
service
DownloadService.class 1KB
DownloadService$DownloadThread.class 2KB
Mp3PlayService.class 3KB
activity
R$string.class 502B
R$layout.class 535B
RemoteMp3ListActivity.class 6KB
MainActivity.class 2KB
R$drawable.class 532B
Mp3PlayPanelActivity$MyPlayButtonClickListener.class 2KB
Mp3PlayPanelActivity$MyStopButtonClickListener.class 1KB
R.class 510B
LocalMp3ListActivity.class 3KB
R$attr.class 331B
Mp3PlayPanelActivity.class 3KB
R$id.class 512B
Mp3PlayPanelActivity$MyPauseButtonClickListener.class 1KB
resources.ap_ 208KB
classes.dex 22KB
proguard.cfg 1KB
AndroidManifest.xml 1KB
src
com
gm
xml
Mp3ListContentHandler.java 2KB
HttpDownloader.java 3KB
model
Mp3Info.java 1KB
mp3player
utils
AppConstant.java 326B
FileUtils.java 4KB
service
Mp3PlayService.java 2KB
DownloadService.java 1KB
activity
Mp3PlayPanelActivity.java 3KB
RemoteMp3ListActivity.java 5KB
MainActivity.java 2KB
LocalMp3ListActivity.java 2KB
res
values
strings.xml 263B
layout
local_mp3_list.xml 436B
mp3infoitem.xml 675B
mp3_play_panel.xml 778B
main.xml 793B
remote_mp3_list.xml 436B
drawable-ldpi
play.png 15KB
pause.png 12KB
img1.png 20KB
stop.png 15KB
img2.png 10KB
icon.png 2KB
drawable-hdpi
play.png 15KB
pause.png 12KB
img1.png 20KB
stop.png 15KB
img2.png 10KB
icon.png 4KB
drawable-mdpi
play.png 15KB
pause.png 12KB
img1.png 20KB
stop.png 15KB
img2.png 10KB
icon.png 3KB
.classpath 280B
gen
com
gm
activity
R.java 2KB
assets
共 67 条
- 1
MingMing2033
- 粉丝: 4
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页