簡體   English   中英

在Android中的后台下載多個MP3文件

[英]Download multiple MP3 files in the background in Android

等級:初學者
語言:Java
IDE:Android Studio
案例:在后台連續下載多個URL中的多個MP3文件。
問題:在循環中下載任務以下載所有網址。 歌曲確實按照以下路徑下載但未完全下載(每首歌曲下載3秒/ 4秒基本上非常少)。 不知道是什么問題,如果我能得到任何幫助,那就太好了

  • 從API接收mp3網址
  • 使用以下代碼下載它們。 (問題)
  • 獲取所有路徑並將它們存儲在數據庫中
  • 獲取路徑並連續播放。

     private class DownloadTask extends AsyncTask<SongDetails, Integer, String> { Context context; public DownloadTask(Context context) { this.context = context; } @Override protected void onPreExecute() { super.onPreExecute(); Utilities.showProgressDialog(getActivity(), getFragmentManager()); } @Override protected String doInBackground(SongDetails... songDetails) { for (SongDetails songs : songDetails ) { donwloadsong(songs); } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Utilities.dismissProgressDialog(); } } for (SongDetails songs : songDetails ) { downloadTask(songs); } public void downloadTask(SongDetails songs){ HttpURLConnection httpURLConnection = null; try { URL url = new URL(songs.getUrl()); httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("GET"); httpURLConnection.connect(); int fileLength = httpURLConnection.getContentLength(); InputStream inputStream = new BufferedInputStream(url.openStream(), 8192); OutputStream outputStream1; outputStream1 = new FileOutputStream(Environment.getExternalStorageDirectory() + "/gbeduwarssongs/" + songDetails.getTitle().trim() + ".mp3"); int count = 0; byte data[] = new byte[1024]; int buffer_length; while ((buffer_length = inputStream.read(data)) != -1) { outputStream1.write(data, 0, count); count += buffer_length; } outputStream1.flush(); outputStream1.close(); inputStream.close(); } catch (Exception e) { e.printStackTrace(); Log.e("Error", "Download Error Exception " + e.getMessage()); } finally { if (httpURLConnection != null) httpURLConnection.disconnect(); } } 

而是在新線程內部調用迭代,首先使用迭代,然后在每次迭代中啟動新線程。 我希望它會對你有所幫助。 我發布了您的幫助代碼。

for (SongDetails songs : songDetails) {
        new DownloadTask(pass your song object in constructor).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }

並在doInBackground中調用您的下載方法。

我提議使用DownloadManagerworkmanager AsyncTask使用了一個壞主意。 它存在內存泄漏問題。 asyncTask只使用一個線程

同樣的問題

暫無
暫無

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

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