gpt4 book ai didi

java - Android:ThreadSafeClientConnManager 下载图像时出现错误

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:27 25 4
gpt4 key购买 nike

对于我当前的应用程序,我从不同的“事件”中收集图像供应商”在西类牙。

  Bitmap bmp=null;
HttpGet httpRequest = new HttpGet(strURL);

long t = System.currentTimeMillis();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
Log.i(TAG, "Image ["+ strURL + "] fetched in [" + (System.currentTimeMillis()-t) + "ms]");

HttpEntity entity = response.getEntity();
InputStream instream = entity.getContent();
bmp = BitmapFactory.decodeStream(instream);

return bmp;

但是,从 salir.com 下载图像时,我得到以下信息日志输出:

13970     Gallery_Activity  I  Fetching image 2/8 URL: http://media.salir.com/_images_/verticales/a/0/1/0/2540-los_inmortales_la_trattoria-marc_aureli_27_29_no.jpg
13970 ServiceHttpRequest I Image [http://media.salir.com/_images_/verticales/a/0/1/0/2540-los_inmortales_la_trattoria-marc_aureli_27_29_no.jpg] fetched in [146ms]
13970 skia D --- decoder->decode returned false

对该错误消息的搜索没有提供太多有用的结果。

有人知道问题出在哪里吗?

谢谢!


更新 1:

在进一步询问并测试了不同的东西之后,我发现问题似乎出在其他地方。即使我的 logcat 输出显示

13970     ServiceHttpRequest  I  Image [http://media.salir.com/_images_/verticales/a/0/1/0/2540-los_inmortales_la_trattoria-marc_aureli_27_29_no.jpg] fetched in [146ms]
getContentLength(): 93288

这是图像的正确长度(以字节为单位)似乎流或 HTTP 连接有问题。

我的原始代码(以上)利用了 ThreadSafeClientConnManager .如果我只用一个简单的 URLConnection 替换它,它就可以完美地工作:

URL url = new URL(strURL);
URLConnection conn = url.openConnection();
conn.connect();
InputStream instream = conn.getInputStream();
bmp = BitmapFactory.decodeStream(instream);

所以,我现在想知道为什么我的 ThreadSafeClientConnManager 与我的所有其他连接(主要是交换 JSONObjects)完美地工作(至少看起来是这样)但不是使用来自某些特定网站的图像(例如 salir.com - 对于大多数其他网站,它可以工作,但)。是否缺少 HTTP 参数?

我当前的设置是:

HttpParams parameters = new BasicHttpParams();
HttpProtocolParams.setVersion(parameters, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(parameters, HTTP.UTF_8);
HttpProtocolParams.setUseExpectContinue(parameters, false); // some webservers have problems if this is set to true
ConnManagerParams.setMaxTotalConnections(parameters, MAX_TOTAL_CONNECTIONS);
HttpConnectionParams.setConnectionTimeout(parameters, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(parameters, SOCKET_TIMEOUT);

SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme("http",
PlainSocketFactory.getSocketFactory(), HTTP_PORT));

ClientConnectionManager conMgr = new ThreadSafeClientConnManager(parameters,schReg);

DefaultHttpClient http_client = new DefaultHttpClient(conMgr, parameters);

更新 2:

现在,奇怪的是,它实际上确实与 ThreadSafeClientConnManager -有时- 一起工作。如果我连续几次尝试下载图像并对其进行解码,它可能会在 15-30 次试验后正常工作。很奇怪。

我希望有一个解决方案,因为我更喜欢使用 ThreadSafeClientConnManager 而不是 URLConnection


更新 3:

正如下面 Mike Mosher 所建议的,似乎通过使用 BufferedHttpEntity 解码错误 不再出现。但是现在,尽管比以前少了,但我得到了一个 SkImageDecoder::Factory returned null 错误。

最佳答案

斯特凡,

我遇到了同样的问题,在网上搜索也没找到。很多人都遇到过这个问题,但解决它的答案并不多。

我正在使用 URLConnection 获取图像,但我发现问题不在于下载,而是 BitmapFactory.decodeStream 在解码图像时出现问题。

我更改了我的代码以反射(reflect)您的原始代码(使用 httpRequest)。我做了一个更改,我在 http://groups.google.com/group/android-developers/browse_thread/thread/171b8bf35dbbed96/c3ec5f45436ceec8?lnk=raot 找到了(感谢 Nilesh)。您需要添加“BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);”

这是我之前的代码:

        conn = (HttpURLConnection) bitmapUrl.openConnection(); 
conn.connect();
is = conn.getInputStream();
//bis = new BufferedInputStream(is);
//bm = BitmapFactory.decodeStream(bis);
bm = BitmapFactory.decodeStream(is);

她是有效的代码:

            HttpGet httpRequest = null;

try {
httpRequest = new HttpGet(bitmapUrl.toURI());
} catch (URISyntaxException e) {
e.printStackTrace();
}

HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);

HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream instream = bufHttpEntity.getContent();
bm = BitmapFactory.decodeStream(instream);

正如我所说,我有一个页面下载了大约 40 张图片,您可以刷新以查看最新的照片。 “解码器->解码返回错误错误”,我几乎有一半会失败。使用上面的代码,我没有遇到任何问题。

谢谢

关于java - Android:ThreadSafeClientConnManager 下载图像时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1630258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com