2011-11-22 20 views
12

Android mobilde HttpClient tarafından bir sunucuya bir fotoğraf yüklemeyi denedim, ancak bazen bu hatayı alıyorum, her zaman olmayacak. Herkes bunu nasıl çözeceğini biliyor mu?HttpPost, "Tekrar edilebilir olmayan bir istek varlığı ile isteği yeniden deneme isteği" nedeniyle başarısız oldu

gibi kodum:

HttpClient client =new DefaultHttpClient(); 
HttpPut httpPut = new HttpPut(uploadUrl);  
InputStream in =null; 
HttpResponse response =null; 
     try { 
      in = new FileInputStream(filepath); 
      BasicHttpEntity entity = new BasicHttpEntity(); 
      entity.setContent(in); 
      entity.setContentLength(new File(basepath+path).length()); 

      httpPut.setEntity(entity); 
      response = client.execute(httpPut); 
      System.out.println(response.getStatusLine()); 


      consume(response.getEntity()); 


     } 

.......

Hata bilgisi:

11-22 10:32:50.370: W/System.err(15224): org.apache.http.client.ClientProtocolException 
11-22 10:32:50.370: W/System.err(15224): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557) 
11-22 10:32:50.370: W/System.err(15224): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
11-22 10:32:50.370: W/System.err(15224): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
11-22 10:32:50.370: W/System.err(15224): at com.hp.nimbus.android.skydrive.util.SkyDriveUtils_Rest.doUploadPhoto(SkyDriveUtils_Rest.java:203) 
11-22 10:32:50.380: W/System.err(15224): at com.hp.nimbus.android.skydrive.util.SkyDriveUtils_Rest.uploadPhoto(SkyDriveUtils_Rest.java:250) 
11-22 10:32:50.380: W/System.err(15224): at com.hp.nimbus.android.skydrive.FolderMonitorService$1.onEvent(FolderMonitorService.java:36) 
11-22 10:32:50.380: W/System.err(15224): at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125) 
11-22 10:32:50.380: W/System.err(15224): at android.os.FileObserver$ObserverThread.observe(Native Method) 
11-22 10:32:50.380: W/System.err(15224): at android.os.FileObserver$ObserverThread.run(FileObserver.java:88) 
11-22 10:32:50.380: W/System.err(15224): Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity 
11-22 10:32:50.380: W/System.err(15224): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:419) 
11-22 10:32:50.380: W/System.err(15224): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
11-22 10:32:50.390: W/System.err(15224): ... 8 more 
+0

Merhaba, cevabınız için teşekkürler. FileEntity'yi daha önce denedim, sorun şu ki, yükleme sunucusu FileEntity'yi desteklemiyor, FileInputStream'i kullanmalıyım. Ve ilk isteğin başarısız olduğunu belirttiniz, Bu başarısızlığın nedenini biliyor mu? – user1059217

+3

"FileEntity" yi desteklemiyor tuhaf geliyor. Basit bir düzeltme için, varlığınızı bir BufferedHttpEntity içinde sarmalamayı deneyin. Bu, tekrarlanabilir hale getirecek, ancak bunu yaparken biraz daha fazla bellekte çiğnemeye çalışacaktır. – Jens

cevap

6

Başlangıçtaki isteği başarısız anlamına gelir ve bir dere olduğu için bu can Tekrar etmeyin.

FileInputStream'u kaldırır ve bunun yerine FileEntity'u kullanırsanız, yinelenebilir olacağına inanıyorum.

Ayrıca uzunluğunu ayarlamak zorunda değilsiniz.

2

Bu soruyu yanıtlamak için biraz geç olabilir, ancak bu sayfaya giren kişiler için istisnanın nedeni BasicHttpEntity tekrarlanabilir isteklere izin vermez. Uygun HttpEntity uygulamasını kullanmanız gerekecektir.

Bu soru için, diğer yanıtta Matthew Flaschen tarafından belirtildiği gibi FileEntity olacaktır, ancak diğer vakaların çoğu için, tekrarlanabilir isteklere izin veren StringEntity kullanılabilir.

İlgili konular