2015-07-10 5 views
1

В основном я использовал эти конкретные строки кода довольно давно и никогда не имел проблем с ним. Ничего не трогали, но теперь я получаюHttp-запрос - уже подключен

IllegalStateException - Уже подключен

именно после того, как я установил conn.setUsesCaches(false)

public void PutImageToS3(String signedUrl, Bitmap image) throws WampNetworkException, IOException { 
      URL url = new URL(signedUrl); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.getDoOutput(); 
      conn.setUseCaches(false); 
      conn.setRequestMethod("PUT"); 
      conn.addRequestProperty("Content-Type", "image/jpeg"); 
      conn.addRequestProperty("Connection", "close"); 
      OutputStream out = new BufferedOutputStream(conn.getOutputStream()); 
      image.compress(Bitmap.CompressFormat.JPEG, 100, out); 

      if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) { 
       throw new IOException("Failed to upload image to S3: " 
         + conn.getResponseCode() + conn.getResponseMessage() + "\r\n"); 
      } 
      out.flush(); 
      out.close(); 
      conn.disconnect(); 
     } 
+0

Вы должны всегда делиться трассировкой стека печати при отправке вопроса. – Rajesh

ответ

0

писать этот код в try-finally блоке, а затем попытаться

public void PutImageToS3(String signedUrl, Bitmap image) throws WampNetworkException, IOException { 

     try{ 
     URL url = new URL(signedUrl); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.getDoOutput(); 
     conn.setUseCaches(false); 
     conn.setRequestMethod("PUT"); 
     conn.addRequestProperty("Content-Type", "image/jpeg"); 
     conn.addRequestProperty("Connection", "close"); 
     OutputStream out = new BufferedOutputStream(conn.getOutputStream()); 
     image.compress(Bitmap.CompressFormat.JPEG, 100, out); 

     if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) { 
      throw new IOException("Failed to upload image to S3: " 
        + conn.getResponseCode() + conn.getResponseMessage() + "\r\n"); 
     } 
    } 
    finally{ 
     out.flush(); 
     out.close(); 
     conn.disconnect(); 
     } 
    } 
+0

Ничего не изменилось – Alex

+0

попробуйте после удаления, если это выбрасывает Исключение –

+0

Все еще не работает – Alex

0

Вам необходимо написать запрос до получение кода ответа.

Переместить close() до getResponseCode() и удалить избыточное flush().

NB Почему вы звоните getDoOutput() и игнорируете результат?

+0

У меня нет результата, это функция put, просто загружая рис. Но я также не устанавливаю это нигде, могу также удалить его :) Но вопрос в том, почему он прекратил работать? – Alex

+0

К сожалению, это еще не решило эту проблему. – Alex

+0

Она перестала работать, потому что вы пытались получить код ответа, прежде чем полностью написали запрос. У вас нет результата *, потому что * вы его нигде не храните. Вызов 'getDoOutput()' бессмысленен. Убери это. – EJP

0

Изумительное решение было найдено! Сегодня проблема с маршрутизатором, поэтому загрузка - это ад. После перехода в интернет от провайдера он работал как шарм :) GG!

Смежные вопросы