我从SD卡加载歌曲,最初在listview中加载需要时间,在某些移动设备中,应用程序本身也停止了 . 所以,我计划在Async任务的帮助下加载 . 观看了几个使用Array Adapter解释的视频,因为我在这里使用Simple适配器,我不知道如何与Async任务合并,我非常感谢任何建议以更快的速度工作app .

There are two parts that confuses where to apply Async task:

  • It scans the sd card for .mp3 files and load in list.

public class SongsManager {// SDCard Path / 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 with Simple adapter.

if(utils.songsList!= null && utils.songsList.size()> 0){//循环播放播放列表(int i = 0; i <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任务或任何其他去做 . 提前致谢 .