2013-03-16 116 views
1

我正在開發小型Android應用程序,我試圖發送簡單的圖像到我的服務器。我的問題是,當我試圖添加標題內容長度時,它給了我錯誤http客戶端協議異常。我的代碼結構看起來像..Android的http客戶端協議異常

@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

你可以發佈日誌貓的stacktrace嗎? – Quanturium 2013-03-16 04:29:41

+0

我更新了我的問題。 – nilkash 2013-03-16 04:33:15

+3

這裏是你的錯誤「引起:org.apache.http.ProtocolException:內容長度頭已經存在」。刪除setHeader(),你不需要它。 – Quanturium 2013-03-16 04:54:45

回答

1

得到它的懸而未決的問題清單:org.apache.http:


的錯誤是

「所致.ProtocolException:Content-Length頭已存在「。

刪除setHeader(),你不需要它--HttpPut根據你包含的實體設置Content-Length。沒有理由用手去做。

+0

我知道這個問題發佈很久以前,但這個答案是正確的。請接受它 – riedelinho 2016-05-20 12:01:38