Android получает изображение с URL-адреса SingleClientConnManager

Я использую следующий код, чтобы получить изображения логотипа и сохранить его в базе данных.

DefaultHttpClient mHttpClient = new DefaultHttpClient();
HttpGet mHttpGet;
HttpResponse mHttpResponse;
HttpEntity entity;


for (int reportsCount = 0; reportsCount < reportsArr.length; reportsCount++) {



  //Make a request to get our image
  mHttpGet = new HttpGet(reportsArr[reportsCount][1]);
  byte[] categoryLogoArr = null; 
  try {
    mHttpResponse = mHttpClient.execute(mHttpGet);

    if (mHttpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {


       entity = mHttpResponse.getEntity();

       logoArr= EntityUtils.toByteArray(entity);

    }
   } catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
   // TODO Auto-generated catch block
    e.printStackTrace();
   }

   long categoryID = dataHelper.addCategory(reportsArr[reportsCount][0], categoryLogoArr);
}

Первое изображение добавлено отлично, но в остальных случаях оно не работает и выдает следующее предупреждение.

WARN/SingleClientConnManager(2389): Invalid use of SingleClientConnManager: connection still allocated.

В чем проблема в моем коде? Что изменить, чтобы решить эту проблему?


person dev_android    schedule 11.05.2011    source источник


Ответы (1)


Вам необходимо использовать содержимое, прежде чем вы сможете повторно использовать соединение. Это может быть дубликат исключения с использованием HttpRequest.execute(): Недопустимое использование SingleClientConnManager: соединение все еще выделено

Я думаю, что вам нужно потреблять контент, даже если код ответа не HttpStatus.SC_OK, а в ваших обработчиках исключений.

person Mark Allison    schedule 11.05.2011
comment
но мне не удалось добавить catch (HttpResponseException e) { e.response.parseAsString(); }... это дает электронный ответ, который не может быть разрешен или не является полем - person dev_android; 11.05.2011
comment
Согласно javadocs для версии HttpClient для Android, HttpResponseException не поддерживает элемент ответа, поэтому вам не следует пытаться получить к нему доступ. Просто убедитесь, что вы вызываете entity.consumeContent() для всех возможных сценариев. - person Mark Allison; 11.05.2011
comment
Я использовал if (entity!= null) entity.consumeContent(); mHttpClient.getConnectionManager().shutdown(); и это работает отлично. - person dev_android; 12.05.2011