@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是个问题。
我没有进行任何修改。
是什么原因造成的?
我认为您的问题在这里:
HttpURLConnection conn = (HttpURLConnection) imgurl.openConnection();
int len = conn.getContentLength();
阅读有关getContentLength方法的文档
返回由响应头字段content-length指定的内容长度(以字节为单位);如果未设置此字段,则返回-1。
返回响应头字段content-length的值。
因此,您似乎发生了getContentLength返回-1的情况。然后,您可以使用此-1设置数组大小。=>引发异常
检查有关getContentLength返回-1的问题的解决方案,也许您必须做类似的事情。
但是至少您必须len > 0
在设置阵列大小之前检查一下
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句