No se puede repetir la solicitud con una entidad de solicitud no repetible.

Estoy usando la biblioteca java-http-client y Apache Transport con ella en el lado del cliente y Rails en el lado del servidor. De vez en cuando se produce un error como este:

11-24 17:37:02.469: WARN/BaseActivity(5925): org.apache.http.client.ClientProtocolException at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) at com.google.api.client.http.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:58) at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:639) at com.sk.api.SkClient.updateUser(SkClient.java:157) at com.sk.api.SkClient$3.call(SkClient.java:76) at com.sk.api.SkClient$3.call(SkClient.java:71) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) at java.lang.Thread.run(Thread.java:1019) Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:413) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) ... 12 more 

¿Qué debo hacer para evitar esto?

Tengo un error similar porque utilicé CountingInputStreamEntity que es un cliente HTTP no repetible. La solución consistía en utilizar BufferedHttpEntity que convertía el httpclient no repetible en repetible.

 ParcelFileDescriptor fileDescriptor = this.getContentResolver().openFileDescriptor(uri, "r"); InputStream in = this.getContentResolver().openInputStream(uri); CountingInputStreamEntity entity = new CountingInputStreamEntity(in, fileDescriptor.getStatSize()); entity.setUploadListener(this); entity.setContentType("binary/octet-stream"); entity.setChunked(true); BufferedHttpEntity myEntity = null; try { myEntity = new BufferedHttpEntity(entity); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } put.setEntity(myEntity); 

Disculpe por mi mal ingles

Lo resolví como sigue:

 MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); ContentType contentType = ContentType.create("image/jpeg", Consts.ISO_8859_1); entityBuilder.addBinaryBody(PARAM_ATTACHMENT, new File(filepath), contentType, StringUtils.getFileName(filepath)); 
  • Facebook Connect Android - usando stream.publish @ http://api.facebook.com/restserver.php
  • Práctica recomendada para gestionar la llamada de error HTTP
  • Establecer la fecha / hora de Android mediante programación
  • Cómo evitar declaraciones GC_CONCURRENT en Logcat
  • En Android, ¿cómo puedo tomar una acción cada vez que cambia una variable?
  • Error de fusión de manifiesto
  • Cambiar la actividad con Swipe
  • ¿Cómo puedo evitar el error StAX API en Android cuando uso JAXB?
  • Asegúrese de que el nombre de clase existe, es público y tiene un constructor vacío para fragmento público con nombre de clase y constructor vacío
  • WiFi Direct en Android no funciona correctamente
  • Cómo recorrer los elementos en Android RecyclerView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.