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?
- Gradle: descargue dependencias, bloquee versiones y actualice dependencias manualmente
- ¿Cómo manejar los campos JSON opcionales en Retrofit para Android?
- Adición de la vista de desplazamiento al diseño lineal dinámicamente
- Biblioteca .jar de Android dentro de la biblioteca .jar - Dependencias anidadas
- Transparencia de OpenGL ES 2.0 mediante pruebas alfa en shader
- Responder a llamadas de teléfono Android de PC por bluetooth
- Twitter4j: Obtener la lista de respuestas para un determinado tweet
- Android: ¿Cómo cargar dinámicamente las clases de un archivo JAR?
- Resaltar texto en varios controles EditText simultáneamente
- Cómo convertir la longitud de la latitud en formato de grado
- Cómo cambiar de HttpClient a HttpUrlConnection
- MediaPlayer TimeoutException
- Cómo eliminar el relleno alrededor de los botones en Android?
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));
- Aplicación para móviles: ¿cómo mostrar el OTP que mi aplicación envía en una ventana emergente sin salir de mi aplicación?
- Android Studio error ADB inalámbrico (10061)