使用 httpclient(apache 凭据)连接下载各种设备的各种位图失败....其中一个工作正常,¿为什么?
我正在正确关闭连接?我不确定,我正在盯着这些凭据 http 连接。
我正在为 android (java) 开发一个应用程序,它连接到服务器以下载 50 个位图,并且我每次都使用此功能来下载每个位图:
public static Bitmap getRemoteBitmap(String url) {
Bitmap bm=null;
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
try {
((AbstractHttpClient) httpclient).getCredentialsProvider().setCredentials(
new org.apache.http.auth.AuthScope(null,-1),
new org.apache.http.auth.UsernamePasswordCredentials(MagazineStatus._username, MagazineStatus._password));
response = httpclient.execute(new HttpGet(url));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK) {
try {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
bm=BitmapFactory.decodeStream(content );
}catch(Exception ex) {Log.e("DBF Error",ex.toString());}
}else {
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
}catch(ClientProtocolException cpe) {
Log.e("ClientProtocolException @ at FPT",cpe.toString());
} catch(Exception ex) {
Log.e("Exception at FETCHPROJECTASK",ex.toString());
}
return bm;
}
如果我尝试用一个设备下载位图,它可以正常工作,但如果我尝试同时下载 3 或 4 个设备的位图,那么,这个功能会失败,因为这条线bm=BitmapFactory.decodeStream(content );
给了我一个空位图,我不明白为什么,因为, 和content
不entity
为空。statusLine
response
这些是位图为空时这些变量的bm
值:
回复:
"response" (id=830078599368)
entity BasicManagedEntity (id=830078617768)
headergroup HeaderGroup (id=830078599408)
locale Locale (id=830078292336)
params ClientParamsStack (id=830079041944)
reasonCatalog EnglishReasonPhraseCatalog (id=830004685872)
statusline BasicStatusLine (id=830078599344)
状态线:
"statusLine" (id=830078599344)
protoVersion HttpVersion (id=830004713800)
reasonPhrase "OK" (id=830078599288)
statusCode 200
实体:
"entity" (id=830078617768)
attemptReuse false
managedConn null
wrappedEntity BasicHttpEntity (id=830078612272)
内容:
"content" (id=830078617792)
skipBuf null
eofWatcher BasicManagedEntity (id=830078617768)
selfClosed false
我做错了什么?连接是否正确关闭?这可以改善吗?任何帮助将不胜感激。
谢谢
编辑:
关闭连接的正确方法是添加此代码?
content.close();
entity.consumeContent();
还是我必须添加更多内容?
谢谢