@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是个问题。
我没有修改任何东西。
这是什么原因?
答案 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