直接贴代码
public class HttpClientImageDownloader extends BaseImageDownloader implements
ImageDownloader {
public HttpClientImageDownloader(Context context) {
super(context);
}
@Override
protected InputStream getStreamFromFile(String imageUri, Object extra)
throws IOException {
String filePath = Scheme.FILE.crop(imageUri);
File file = new File(filePath);
if(!file.exists())
file.createNewFile();
return new ContentLengthInputStream(new BufferedInputStream(new FileInputStream(filePath), BUFFER_SIZE),
(int) new File(filePath).length());
}
@SuppressLint("UseValueOf")
@Override
protected InputStream getStreamFromNetwork(String imageUri, Object extra)
throws IOException {
// HttpURLConnection conn = createConnection(imageUri, extra);
//
// int redirectCount = 0;
// while (conn.getResponseCode() / 100 == 3 && redirectCount < MAX_REDIRECT_COUNT) {
// conn = createConnection(conn.getHeaderField("Location"), extra);
// redirectCount++;
// }<span style="font-family: Arial, Helvetica, sans-serif;">//EOFException来自conn.getResponseCode()</span>
// InputStream imageStream;
// try {
// imageStream = conn.getInputStream();
// } catch (IOException e) {
// // Read all data to allow reuse connection (http://bit.ly/1ad35PY)
// IoUtils.readAndCloseStream(conn.getErrorStream());
// throw e;
// }
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(imageUri);
request.getParams().setParameter("http.socket.timeout",
new Integer(connectTimeout));
request.addHeader("Pragma", "no-cache");
request.addHeader("Cache-Control", "no-cache");
request.addHeader("Charset", "UTF-8");
HttpResponse httpResponse = client.execute(request);
HttpEntity entity = httpResponse.getEntity();
InputStream imageStream = entity.getContent();
return new ContentLengthInputStream(new BufferedInputStream(imageStream, BUFFER_SIZE), (int)entity.getContentLength());
}
}
另外配置为自己的imageloader
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.threadPoolSize(3)
.imageDownloader(new HttpClientImageDownloader(this ))
.tasksProcessingOrder(QueueProcessingType.LIFO)
.memoryCache(new WeakMemoryCache())
.build();