2011-11-24 12 views
7

私は、クライアント側ではjava-http-clientライブラリとApache Transportを、サーバ側ではApache Transportを使用しています。時々、次のようなエラーが表示されます。反復不可能なリクエストエンティティでリクエストを再試行できません

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 

これを避けるにはどうすればよいですか?

答えて

13

繰り返し回数のないhttpクライアントであるCountingInputStreamEntityを使用したため、私は同様のエラーが発生します。解決策は、反復不可能なHTTPクライアントに変換するBufferedHttpEntityを使用することでした。

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

私の悪い英語

+0

をどのようにあなたが今のHttpClientが廃止されていることをAsyncHttpClientため、このソリューションを実装するのでしょうか? – Takide

0

ためすみません、私はfolllowsとしてそれを解く:

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)); 
関連する問題