0

私のアプリでは、URLからmp3ファイルをダウンロードする必要があります。非同期タスクを使用してファイルをダウンロードしています。テストの目的で、ファイルをドロップボックスに保存しました。問題は、完全なファイルをダウンロードしていないことです。実際のファイルサイズは5MBです。ただし、ダウンロードしているのは29KBのデータのみです。コンテンツの長さを確認すると、-1と表示されました。問題がどこにあるのかわかりません。以下に、コードを投稿します。

@Override
    protected Void doInBackground(String... sUrl) 
    {
        InputStream input = null;
        OutputStream output = null;
        try 
        {
            URL link = new URL(sUrl[0]);
            HttpURLConnection urlConnection = (HttpURLConnection)link.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            urlConnection.connect();
            int fileLength = urlConnection.getContentLength();
            Log.v("Download file length", ""+fileLength);
            input = urlConnection.getInputStream();
            int downloadedSize = 0;
            output = new FileOutputStream(Environment.getExternalStorageDirectory()
                    .getAbsolutePath()+"/audiofolder/1.mp3.mp3");

            byte[] data = new byte[1024];
            int bufferLength = 0;

            while (((bufferLength = input.read(data)) > 0)) 
            {
                output.write(data, 0, bufferLength);
                downloadedSize += bufferLength;
                publishProgress((int)((downloadedSize/fileLength) * 100));
            }//while
            output.flush();
            output.close();
            input.close();
        }//try 
        catch (MalformedURLException e) 
        {
            e.printStackTrace();
        }//catch
        catch (IOException e) 
        {
            e.printStackTrace();
        }//catch
        return null;
    }//diInBackground
4

3 に答える 3

0

私のアプリケーションでは、以下のコードは完全に機能します。あなたはこれを試すことができます。

    @Override
    protected Void doInBackground(String... aurl) {

        try {

            URL url = new URL(aurl[0]);
            URLConnection conexion = url.openConnection();
            conexion.connect();

            File file = new File("mnt/sdcard/");
            file.mkdirs();
            File outputfile = new File(file, title + ".mp3");
            FileOutputStream fileOutput = new FileOutputStream(outputfile);
            InputStream inputStream = conexion.getInputStream();
            int totalSize = conexion.getContentLength();
            int downloadedSize = 0;
            byte[] buffer = new byte[1024];
            int bufferLength = 0;  
            while ((bufferLength = inputStream.read(buffer)) != -1) {
                downloadedSize += bufferLength;
                onProgressUpdate((int) ((downloadedSize * 100) / totalSize));
                fileOutput.write(buffer, 0, bufferLength);
            }
            fileOutput.close();
        } catch (Exception e) {
            download = true;
            e.printStackTrace();

        }
        return null;

    }
于 2012-10-03T11:40:08.250 に答える
0

リンクを確認してください。コンテンツの長さ = -1 と表示されている場合は、リンクのヘッダーにコンテンツの長さが含まれていないことを意味します。ダウンロードの進行状況を強制しません。ウェブサイトをダウンロードするため、ダウンロードするのは 29KB だけです。ファイル mp3 ではなく .html です。リンクをコピーしてブラウザに貼り付けて確認できます。

于 2013-10-11T05:39:45.737 に答える