这是我的代码:
url = paths[0];
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int length = connection.getContentLength(); // i get negetive length
InputStream is = (InputStream) url.getContent();
byte[] imageData = new byte[length];
int buffersize = (int) Math.ceil(length / (double) 100);
int downloaded = 0;
int read;
while (downloaded < length) {
if (length < buffersize) {
read = is.read(imageData, downloaded, length);
} else if ((length - downloaded) <= buffersize) {
read = is.read(imageData, downloaded, length - downloaded);
} else {
read = is.read(imageData, downloaded, buffersize);
}
downloaded += read;
publishProgress((downloaded * 100) / length);
}
Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0,
length);
if (bitmap != null) {
Log.i(TAG, "Bitmap created");
} else {
Log.i(TAG, "Bitmap not created");
}
is.close();
return bitmap;
我在Java文档中查看了此内容,长度为负数,原因如下:
“内容的字节数,如果未知,则为负数。如果内容> length是已知的但超过Long.MAX_VALUE,则返回负数。”
这可能是什么原因?我正在尝试下载图像。我想指出的是,这是我尝试下载图像的第四个方法。这里提到了其他三个。
编辑:
根据要求,这是我正在使用的完整方法。
protected Bitmap getImage(String imgurl) {
try {
URL url = new URL(imgurl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int length = connection.getContentLength();
InputStream is = (InputStream) url.getContent();
byte[] imageData = new byte[length];
int buffersize = (int) Math.ceil(length / (double) 100);
int downloaded = 0;
int read;
while (downloaded < length) {
if (length < buffersize) {
read = is.read(imageData, downloaded, length);
} else if ((length - downloaded) <= buffersize) {
read = is.read(imageData, downloaded, length
- downloaded);
} else {
read = is.read(imageData, downloaded, buffersize);
}
downloaded += read;
// publishProgress((downloaded * 100) / length);
}
Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0,length);
if (bitmap != null) {
System.out.println("Bitmap created");
} else {
System.out.println("Bitmap not created");
}
is.close();
return bitmap;
} catch (MalformedURLException e) {
System.out.println(e);
} catch (IOException e) {
System.out.println(e);
} catch (Exception e) {
System.out.println(e);
}
return null;
}
简单的答案是内容长度未知。更具体地说,服务器未在响应消息中设置“ Content-Length”标头。
您将必须更改代码,以便它不会预分配固定大小的字节数组来保存图像。
一种替代方法是创建一个本地ByteArrayOutputStream
并将从套接字读取的字节复制到该字节。然后调用toByteArray
以获取全字节数组。
如果可以更改服务器端,另一种选择是在响应中设置内容长度标头。这必须在获取OutputStream之前将图像字节写入响应之前完成。
您现有的代码在另一方面也被破坏了。如果收到IOException或其他异常,则代码块将“异常退出”而不关闭URLConnection。这将导致文件描述符泄漏。这样做太多次,由于文件描述符…或本地端口号用尽,您的应用程序将失败。
最佳实践是使用try / final来确保始终关闭约束外部资源的URLConnections,Sockets,Streams等。
我想画出泊松分布,得到λ的负概率 此代码为不同的lambda生成绘图: 请看这两幅图: 在我看来,Lambda=5看起来不错。 λ=9,不适用。 我很确定这和np.power有关因为 给我:-1937019605,而 给我:2357947691(WolframAlpha也一样)。 但是如果我避免np。权力与使用 为了计算概率,我也得到负值。我完全糊涂了。谁能解释一下效果或者我做错了什么?提前感谢。
问题内容: 起初我想注意到英语不是我的母语,无论我希望我们不会误会 我在Android上编写了简单的应用程序,发现了一个问题,也解决了该问题,但是无论如何,我都想了解为什么会这样。 我创建了一个sql表: 并以这种方式将数据放入其中: 现在..一切正常,我使用此应用程序进行了验证,可以存储的值正确。 不过,当我尝试使用1得到错误的值2)获得日期值时,它的负数(例如-1004124) 因此,我尝试用
为什么numeric_limits::min返回一个负值为int,但正值为例如浮动和双? 输出: 参考文献: 返回可由数字类型T表示的最小有限值。 对于具有反规范化的浮点类型,min返回最小的正规范化值。请注意,这种行为可能是意外的,特别是与整型类型的min行为相比。要查找没有值小于它的值,请使用。 min仅对有界类型和无界无符号类型有意义,也就是说,表示无穷多个负值的类型没有意义的最小值。
问题内容: 如果我有包含10个元素的列表: 为什么l [10]返回IndexError,而l [-1]返回0? 如果列表中没有以前的元素,我想做的就是抛出一个错误。 问题答案: 在Python中,负列表索引表示从列表右边开始计数的项(即的简写形式)。 如果发现需要负索引来指示错误,那么您可以简单地检查这种情况并亲自引发异常(或在那里进行处理):
我读到这些方法返回值的规则是,对于obj1.compareTo(ob2),例如,如果ob2在层次结构中位于ob1之下,则返回值为负值,如果它位于ob1之上,则返回值为正(如果它等于,则返回值为0)。然而,在我的类中,我看到了使用Math.signum在compareTo方法中获得-1(表示负值)和1(表示正值)的示例。 有什么原因吗? 编辑: 以下是我的意思:
问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方