簡體   English   中英

未使用AsyncTask加載的ListView項目

[英]ListView items not loaded using AsyncTask

我正在嘗試使用AsyncTask從SDView的SD卡中加載歌曲。 當我運行該應用程序時,ListView中未添加任何內容。 ListView為空。 當我未實現AsyncTask方法時,應用程序正在工作。 由於從SD卡提取歌曲,應用程序凍結了2或3秒。 因此有人建議在您的代碼中實現AsyncTask方法。 當我添加方法時,ListView顯示為空。 我不知道我的代碼在哪里出錯。 請更正代碼。 感謝您的建議和幫助。

SongsManager類

public class SongsManager {

private static final String TAG = "songsManagerMessage";
final String MEDIA_PATH = Environment.getExternalStorageDirectory() .getPath() + "/";
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
private String mp3Pattern = ".mp3";

// Constructor
 public SongsManager() {
 }

/** * Function to read all mp3 files and store the details in * ArrayList * */

public ArrayList<HashMap<String, String>> getPlayList() {
    Log.i(TAG,"getPlaylist");
            System.out.println(MEDIA_PATH);
            if (MEDIA_PATH != null) {
                File home = new File(MEDIA_PATH);
                File[] listFiles = home.listFiles();
                if (listFiles != null && listFiles.length > 0) {
                    for (File file : listFiles) {
                        System.out.println(file.getAbsolutePath());
                        if (file.isDirectory()) {
                            scanDirectory(file);
                        } else {
                            addSongToList(file);
                        }
                    }
                }
            }
    return songsList;
}


private void scanDirectory(final 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);
                        }
                    }
                }
            }
    Log.i(TAG,"scanDirectory");
}


private void addSongToList(File song) {
    Log.i(TAG,"scanDirectory");
    if (song.getName().endsWith(mp3Pattern)) {
        HashMap<String, String> songMap = new HashMap<String, String>();
        songMap.put("songTitle", song.getName().substring(0, (song.getName().length() - 4)));
        songMap.put("songPath", song.getPath());

        // Adding each song to SongList
        songsList.add(songMap);
    }
}
}

GetSongsAsyncTask類

public class GetSongsAsyncTask extends AsyncTask<Void,Void, List<HashMap<String, String>>> {

private static final String TAG = "AsyncTaskMessgae";

private final SongsManager mSongsManager;

public interface SongsReceivedListener {
    void onSongsReceived(List<HashMap<String, String>> songs);

}

private SongsReceivedListener mSongsReceivedListener;

public GetSongsAsyncTask(SongsReceivedListener mSongsReceivedListener) {
    this.mSongsReceivedListener = mSongsReceivedListener;
    mSongsManager = new SongsManager();
    Log.i(TAG,"GetSongsAsyncTaskMessage");
}

@Override
protected List<HashMap<String, String>> doInBackground(Void... params) {
    Log.i(TAG,"doInBackgroundMessage");
    return mSongsManager.getPlayList();
}


@Override
protected void onPostExecute(List<HashMap<String, String>> v) {
    Log.i(TAG,"onPostExecuteMessage");
    if(mSongsReceivedListener != null) {
        mSongsReceivedListener.onSongsReceived(v);
    }
 }
}

Tab1片段類

public class Tab1 extends ListFragment implements GetSongsAsyncTask.SongsReceivedListener {

private static final String TAG = "tab1Message";

// Songs list
public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.i(TAG, "onCreateView");
    View V = inflater.inflate(R.layout.tab1, container, false);
    new GetSongsAsyncTask(this).execute();
     return V;
}


@Override
public void onSongsReceived(List<HashMap<String, String>> songs) {
    if(getContext() == null)
        return;
    // looping through playlist
 for (int i = 0; i < songsList.size(); i++) {
  // creating new HashMap
  HashMap<String, String> song = songs.get(i);
  // adding HashList to ArrayList
  songsListData.add(song);
  }
  // Adding menuItems to ListView
    ListAdapter adapter = new SimpleAdapter(getContext(), songsListData,
            R.layout.playlist_item, new String[]{"songTitle"}, new int[]{
            R.id.songTitle});
    setListAdapter(adapter);
    Log.i(TAG, "onSongsReceivedMessage");
 }
 }
ListAdapter adapter = new SimpleAdapter(getContext(), songsListData,
        R.layout.playlist_item, new String[]{"songTitle"}, new int[]{
        R.id.songTitle});
setListAdapter(adapter);
Log.i(TAG, "onSongsReceivedMessage");

只需將SongsListData替換為歌曲,就可以了:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM