我的文件下载器突然出现错误

时间:2014-02-21 07:26:15

标签: android download apk

@Override
    public void run() {
        URL imgurl;
        int Read;
        try {
            imgurl = new URL(ServerUrl);
            HttpURLConnection conn = (HttpURLConnection) imgurl.openConnection();
            int len = conn.getContentLength();
            Log.d("check", "ContentLength:" + len);
            Log.d("check", "ServerUrl:" + ServerUrl);
            Log.d("check", "LocalPath:" + LocalPath);
            byte[] tmpByte = new byte[len];
            InputStream is = conn.getInputStream();
            File file = new File(LocalPath);
            FileOutputStream fos = new FileOutputStream(file);
            for (;;) {
                Read = is.read(tmpByte);
                if (Read <= 0) {
                    break;
                }
                fos.write(tmpByte, 0, Read);
            }
            is.close();
            fos.flush();
            fos.close();
            conn.disconnect();


        } catch (MalformedURLException e) {
            ut.CalltoAlertDialog_ok(getString(R.string.alert), getString(R.string.setting_skin_downloadfail));
        } catch (IOException e) {
            ut.CalltoAlertDialog_ok(getString(R.string.alert), getString(R.string.setting_skin_downloadfail));
        }

        mAfterDown.sendEmptyMessage(0);
    }

这是文件下载源。

此代码从此处打印错误“NegativeArraySizeException”

byte[] tmpByte = new byte[len];

所以,我检查了len的价值 len的值是-1。

但是.. 当我昨天创建时,此代码不是打印错误。

我有2个apk文件。
昨天创建的apk不是问题。即使现在这个apk也没问题 但是,今天创建的apk是个问题。

我没有修改任何东西。

这是什么原因?

1 个答案:

答案 0 :(得分:1)

我认为你的问题在这里:

  HttpURLConnection conn = (HttpURLConnection) imgurl.openConnection();
  int len = conn.getContentLength();

阅读有关getContentLength方法

的文档
  

返回响应头指定的内容长度(以字节为单位)   field content-length如果未设置此字段,则为-1。

     

返回响应头字段content-length的值。

所以getContentLength返回-1的情况似乎发生在你身上。然后使用此-1设置数组大小。 =&GT;抛出异常

检查此question about getContentLength returning -1的解决方案,也许你必须做类似的事情。

但至少在设置数组大小之前必须检查len > 0