HttpPost falló debido a "No se puede reintentar solicitud con una entidad de solicitud no repetible"

He intentado subir una foto a un servidor por HttpClient en android móvil, pero a veces me sale este error, no sucede siempre. ¿Alguien sabe cómo resolverlo?

Mi código como:

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()); } 

…….

Información de error:

 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 

Significa que la solicitud inicial no, y porque es una corriente no puede repetirla.

Si quita el FileInputStream y en su lugar utiliza FileEntity , creo que será repetible.

Tampoco tendrá que ajustar la longitud.

Podría ser un poco tarde para responder a esta pregunta, pero para las personas que aterrizan en esta página, la razón de la excepción es BasicHttpEntity no permite peticiones repetibles. Deberá utilizar la implementación adecuada de HttpEntity .

Para el caso de esta pregunta, será FileEntity como Mateo Flaschen mencionado en la otra respuesta, pero para la mayoría de los otros casos, StringEntity se puede utilizar que permite peticiones repetibles.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.