我从SD卡加载歌曲,最初在listview中加载需要时间,在某些移动设备中,应用程序本身也停止了。所以,我计划在Async任务的帮助下加载。 观看了几个使用Array Adapter解释的视频,因为我在这里使用的是Simple适配器,我不知道如何与Async任务合并,我非常感谢任何建议以更快的速度工作app。
有两个部分混淆了应用异步任务的位置:
它会扫描SD卡上的.mp3文件并加载到列表中。
public class SongsManager { // SDCard路径 / final String MEDIA_PATH = Environment.getExternalStorageDirectory() .getPath()+“/ Download”; / private ArrayList> songsList = new ArrayList>();
//final ArrayList<File> mySongs = getPlayList(Environment.getExternalStorageDirectory());
// Constructor
public SongsManager(){
}
/**
* Function to read all mp3 files from sdcard
* and store the details in ArrayList
* */
public ArrayList<HashMap<String, String>> getPlayList(File root){
final SongsManager context = this;
//File home = new File(MEDIA_PATH);
//File[] files = home.listFiles(new FileExtensionFilter());
File[] files = root.listFiles(); // All file and folder automatic collect
if ( files!=null && files.length > 0)
{
for (File file : files) {
if (file.isDirectory()) {
scanDirectory(file);
} else {
addSongToList(file);
}
}
}
else
{
return null;
//Toast toast = Toast.makeText(this,"",Toast.LENGTH_SHORT).show();
}
// return songs list array
return songsList;
}
private void scanDirectory(File directory) {
if (directory != null) {
File[] listFiles = directory.listFiles();
if (listFiles != null && listFiles.length > 0) {
for (File file : listFiles) {
if (file.isDirectory()) {
scanDirectory(file);
} else {
addSongToList(file);
}
}
}
}
}
private void addSongToList(File song) {
HashMap<String, String> songMap = new HashMap<String, String>();
try {
// Adding each song to SongList
if (accept(song)) {
songMap.put("songTitle",
song.getName().substring(0, (song.getName().length() - 4)));
songMap.put("songPath", song.getPath());
songsList.add(songMap);
System.out.println(songMap);
}
else{
System.out.println("invalid song:"+song.getPath());
}
}
catch(Exception e){e.printStackTrace();}
}
public boolean accept(File song) {
return (song.getPath().endsWith(".mp3") || song.getPath().endsWith(".MP3"));
}
}
使用简单适配器的Listview。
if(utils.songsList!= null&amp;&amp; utils.songsList.size()&gt; 0){ //循环播放列表 for(int i = 0; i&lt; utils.songsList.size(); i ++){ //创建新的HashMap HashMap song = utils.songsList.get(i);
// adding HashList to ArrayList
songsListData.add(song);
}
// Adding menuItems to ListView
adapter = new SimpleAdapter(this, songsListData,
R.layout.playlist_item, new String[]{"songTitle"}, new int[]{
R.id.songTitle});
setListAdapter(adapter);
请建议我如何使用Async任务或任何其他方式执行此操作。 提前谢谢。