java - 无法使用不可重复的请求实体重试请求

标签 java android exception

我在客户端使用 java-http-client 库和 Apache Transport,在服务器端使用 Rails。有时会出现这样的错误:

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

我应该怎么做才能避免这种情况?

最佳答案

我有一个类似的错误,因为我使用了一个不可重复的 http 客户端 CountingInputStreamEntity。解决方案是使用 BufferedHttpEntity 将不可重复的 httpclient 转换为可重复的 httpclient。

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

关于java - 无法使用不可重复的请求实体重试请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53170256/

相关文章:

java - 从两个或多个组中检索前 N 个对象

java - 使用正则表达式验证语句

java - slick2d(lwjgl)、nifty、kryonet - 如何构建 .jar?

java - fragment 中按钮的 onClickListener 问题

android - HoloEverywhere 中 TextView/EditText 的自定义错误弹出窗口?

c++ - 为什么在 C++ 中不经常使用异常?

java - 用java实现RSA算法

android - 是否可以在 C++ 中创建控件并在 Java Activity 中使用?

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

c# - VirtualPathUtility.IsAbsolute(path) 在路径包含参数时抛出异常