Android: Błąd z programem ThreadSafeClientConnManager pobierającym obrazy

W mojej obecnej aplikacji zbieram zdjęcia od różnych „dostawców wydarzeń” w Hiszpanii.

  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;

Jednak podczas pobierania obrazów z salir.com otrzymuję następujące dane wyjściowe logcat:

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

Wyszukiwanie tego komunikatu o błędzie nie przyniosło wiele przydatnych wyników.

Czy ktoś ma pojęcie, jaki może być problem?

Gracias!

Aktualizacja 1:

Po zapytaniu trochę więcej i przetestowaniu różnych rzeczy doszedłem do wniosku, że problem wydaje się leżeć gdzieś indziej. Nawet jeśli moje wyjście logcat mówi

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

która jest prawidłową długością obrazu w bajtach, wydaje się, że coś jest nie tak ze strumieniem lub połączeniem HTTP.

Mój oryginalny kod (powyżej) korzysta zThreadSafeClientConnManager. Jeśli zastąpię go tylko prostymURLConnection działa doskonale:

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

Zastanawiam się teraz, dlaczego mójThreadSafeClientConnManager działa bez zarzutu (przynajmniej wydaje się, że tak jest) ze wszystkimi moimi innymi połączeniami (głównie wymianaJSONObjects), ale nie z obrazami z niektórych konkretnych stron internetowych (np. salir.com - dla większości innych stron internetowych jednak działa). Czy brakuje mi parametru HTTP?

Moja obecna konfiguracja to:

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);

Aktualizacja 2:

Dziwne jest to, że faktycznie działa zThreadSafeClientConnManager -czasami-. Jeśli próbuję pobierać obraz i dekodować go kilka razy z rzędu, może działać po 15-30 próbach. Bardzo dziwny.

Mam nadzieję, że istnieje rozwiązanie tego problemu, ponieważ wolałbym używaćThreadSafeClientConnManager zamiastURLConnection.

Aktualizacja 3:

Jak sugeruje Mike Mosher poniżej, wydaje się, że używającBufferedHttpEntity błąd dekodowania już się nie pojawia. Jednak teraz, choć rzadziej niż wcześniej, dostajęSkImageDecoder::Factory returned null błąd.

questionAnswers(11)

yourAnswerToTheQuestion