2013-03-16 2 views
1

Я разрабатываю небольшое приложение для Android, в котором я попытался отправить простое изображение на свой сервер. Моя проблема заключается в том, что когда я пытался добавить длину содержимого заголовка, это дало мне ошибку исключения HTTP-клиента. Моя структура кода выглядит следующим образом:Исключение протокола HTTP http client

@Override 
protected Void doInBackground(Void... unused) { 

    HttpClient hc = new DefaultHttpClient(); 
    String message; 
    HttpPut p = new HttpPut("https://abc.com"); 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    bitmap.compress(CompressFormat.JPEG, 100, bos); 
    byte[] data = bos.toByteArray(); 

    try { 
     int size = data.length; 
     p.setEntity(new ByteArrayEntity(data)); 

     p.setHeader("Content-Length", Long.toString(data.length)); 
     //p.setHeader("Content-Length", "0"); 
     //p.setHeader("Content-type", "application/json"); 

     HttpResponse resp = hc.execute(p); 
     if (resp != null) 
     { 
      if (resp.getStatusLine().getStatusCode() == 204) 
      { 

      } 
     } 

     Log.d("Status line", "" + resp.getStatusLine().getStatusCode()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

@Override 
protected void onProgressUpdate(Void... unsued) { 

} 

@Override 
protected void onPostExecute(Void result) { 
    try { 
     if (dialog.isShowing()) 
      dialog.dismiss(); 
     Log.i("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "before exception "+result); 

    } catch (Exception e) { 
     Log.i("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "inside catch "); 
     Toast.makeText(getApplicationContext(),"Error"+e, 
       Toast.LENGTH_LONG).show(); 
     Log.e(e.getClass().getName(), e.getMessage(), e); 
    } 
} 

Я правильно делаю? Как решить эту проблему. Нужна помощь. Спасибо.

Моя ошибка трассировки выглядит

03-16 10:02:47.663: W/System.err(5804): org.apache.http.client.ClientProtocolException 
03-16 10:02:47.687: W/System.err(5804):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557) 
03-16 10:02:47.687: W/System.err(5804):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
03-16 10:02:47.687: W/System.err(5804):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
03-16 10:02:47.687: W/System.err(5804):  at com.example.profileimage.ImageUpload$ImageUploadTask.doInBackground(ImageUpload.java:243) 
03-16 10:02:47.687: W/System.err(5804):  at com.example.profileimage.ImageUpload$ImageUploadTask.doInBackground(ImageUpload.java:1) 
03-16 10:02:47.687: W/System.err(5804):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
03-16 10:02:47.687: W/System.err(5804):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
03-16 10:02:47.687: W/System.err(5804):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
03-16 10:02:47.687: W/System.err(5804):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
03-16 10:02:47.687: W/System.err(5804):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
03-16 10:02:47.687: W/System.err(5804):  at java.lang.Thread.run(Thread.java:1019) 
03-16 10:02:47.687: W/System.err(5804): Caused by: org.apache.http.ProtocolException: Content-Length header already present 
03-16 10:02:47.695: W/System.err(5804):  at org.apache.http.protocol.RequestContent.process(RequestContent.java:70) 
03-16 10:02:47.695: W/System.err(5804):  at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:290) 
03-16 10:02:47.695: W/System.err(5804):  at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:160) 
03-16 10:02:47.695: W/System.err(5804):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401) 
03-16 10:02:47.695: W/System.err(5804):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
03-16 10:02:47.695: W/System.err(5804):  ... 10 more 
+0

Можете ли вы опубликовать стек из логарифма? – Quanturium

+0

Я обновил свой вопрос. – nilkash

+3

Вот ваша ошибка «Причиненный: org.apache.http.ProtocolException: Content-Length header уже присутствует». Удалите setHeader(), вам это не нужно. – Quanturium

ответ

1

Чтобы получить его без ответа список вопросов:


Ошибка является

«Вызванный: org.apache.http .ProtocolException: Content-Length header уже присутствует ".

Удалить SetHeader(), вам не нужно - HttpPut наборы Content-Length на основе Entity включить. Нет причин делать это вручную.

+0

Я знаю, что вопрос был опубликован давно, но этот ответ правильный. Пожалуйста, примите это – riedelinho