我得到-1长度的文件asynctask android下载

时间:2012-03-08 18:37:09

标签: android download android-asynctask

我有一个问题,我得到-1作为文件的长度。我花了很多时间来解决它。我不知道为什么会这样。此外,当我再次调用asynctask时,song1保持不变(但是song1值没有任何问题,我用吐司测试并且它有效)。 'song1'是一个字符串,每次都有不同的值。谢谢。

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DIALOG_DOWNLOAD_PROGRESS:
            mProgressDialog = new ProgressDialog(this);

            mProgressDialog.setMessage("Downloading "+song1+"..");
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();
            return mProgressDialog;
        default:
            return null;
    }
}




protected String doInBackground(String... aurl) {
        int count;

        try {
            URL url = new URL(aurl[0]);
            URLConnection conexion = url.openConnection();
            ((HttpURLConnection) conexion).setInstanceFollowRedirects(true);
            conexion.connect();


            int lenghtOfFile = conexion.getContentLength();
            Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);

            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream("/sdcard/download/"+song1);

            byte data[] = new byte[20480];

            long total = 0;


            while ((count = input.read(data)) != -1) {
                total += count;
                publishProgress(""+(int)((total/lenghtOfFile)*100));
                output.write(data, 0, count);
            }

            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {}
        return null;

    }

这是我的LogCat

03-08 20:25:17.714: D/ANDRO_ASYNC(14559): Lenght of file: -1
03-08 20:25:18.564: D/dalvikvm(14559): GC freed 18632 objects / 1179128 bytes in 112ms
03-08 20:25:18.864: I/global(14559): Default buffer size used in BufferedInputStream constructor. It would be better to be explicit if an 8k buffer is required.
03-08 20:25:18.874: D/ANDRO_ASYNC(14559): -420000
03-08 20:25:18.954: D/ANDRO_ASYNC(14559): -700000
03-08 20:25:18.984: D/ANDRO_ASYNC(14559): -1820000
03-08 20:25:19.029: D/ANDRO_ASYNC(14559): -1960000

2 个答案:

答案 0 :(得分:0)

获得-1的长度并不罕见。通常这意味着服务器正在向您发送数据缓冲区(可能因为它已满),但它仍然不知道响应的整个大小。或者它是一个懒惰的开发者。

长度为-1时,您只需要保持加载信息,直到您在流的末尾。

答案 1 :(得分:0)

web.setDownloadListener { url, userAgent, contentDisposition, mimeType, contentLength ->
    val ul = url
    DownloadFile(this, url,contentLength).execute(ul)
}