【问题标题】:i get -1 length of file asynctask android download我得到-1长度的文件asynctask android下载
【发布时间】:2012-03-08 18:37:09
【问题描述】:

我有一个问题,我得到 -1 作为文件的长度。我尝试了很多时间来修复它。我不知道为什么会这样。此外,当我再次调用 asynctask 时,song1 保持不变(但 song1 值没有任何问题,我用 toast 进行了测试,它可以工作)。 '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

【问题讨论】:

    标签: android download android-asynctask


    【解决方案1】:
    web.setDownloadListener { url, userAgent, contentDisposition, mimeType, contentLength ->
        val ul = url
        DownloadFile(this, url,contentLength).execute(ul)
    }
    

    【讨论】:

    • 欢迎来到 StackOverflow。虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
    【解决方案2】:

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

    长度为-1,您只需要继续加载信息,直到您到达流的末尾。

    【讨论】:

    • 我以-1 长度正常下载,但基本问题是进度条不起作用。还是卡在0%,下载完成后就消失了
    • 那么你在你的 onProgressUpdate 方法中用进度条做了什么吗?有什么价值?我猜这是一个非常大的负值,所以保持为 0 对我来说是有意义的。
    • 看看这个关于异步任务和进度的问题:stackoverflow.com/questions/6450275/…
    • onProgressUpdate 我有 thisLog.d("ANDRO_ASYNC",progress[0]); mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    • 嘿,你有没有解决这个问题。请帮忙,我也面临同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多