Android客户端http请求使用的InputStreamEntity抛出异常ClientProtocolException解决办法
来源:互联网 发布:淘宝卖家评论回复语 编辑:程序博客网 时间:2024/05/21 23:02
参考http://blog.csdn.net/wudiwo/article/details/9339445
上文中描述的
1.1.7 生成实体内容
HttpClient提供一些类,它们可以用于生成通过HTTP连接获得内容的有效输出流。为了封闭实体从HTTP请求中获得的输出内容,那些类的实例可以和封闭如POST和PUT请求的实体相关联。HttpClient为很多公用的数据容器,比如字符串,字节数组,输入流和文件提供了一些类:StringEntity,ByteArrayEntity,InputStreamEntity和FileEntity。
File file = new File("somefile.txt");FileEntity entity = new FileEntity(file, "text/plain; charset=\"UTF-8\"");HttpPost httppost = new HttpPost("http://localhost/action.do");httppost.setEntity(entity);
请注意InputStreamEntity是不可重复的,因为它仅仅能从低层数据流中读取一次内容。通常来说,我们推荐实现一个定制的HttpEntity类,这是自我包含式的,用来代替使用通用的InputStreamEntity。FileEntity也是一个很好的起点。
描述的很清楚,InputStreamEntity是无法重试的,只要重试,通过源码可以看到,其isRepeatable()属性返回的是false,从而抛出了一个ClientProtocolException。由于InputStreamEntity本身设计成这样,对其属性的更改不是一个好的办法,google了一些文章,比较推荐的是使用ByteArrayEntity来代替InputStreamEntity。由于服务器端从这两者中获取数据得到的是一样的,因此对服务器端不需要做修改。只是需要将InputStreamEntity的入参(inputStream,int)变成(byte[])即可。
具体报错信息为:
06-15 19:46:04.687 1453 3121 W System.err: org.apache.http.client.ClientProtocolException
06-15 19:46:04.687 1453 3121 W System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:597)
06-15 19:46:04.687 1453 3121 W System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:518)
06-15 19:46:04.687 1453 3121 W System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:496)
06-15 19:46:04.687 1453 3121 W System.err: at com.funambol.syncml.spds.SyncManager.sync(SyncManager.java:610)
06-15 19:46:04.687 1453 3121 W System.err: at com.funambol.client.engine.SyncEngine.fireSync(SyncEngine.java:606)
06-15 19:46:04.687 1453 3121 W System.err: at com.funambol.client.engine.SyncEngine$SyncThread.synchronize(SyncEngine.java:530)
06-15 19:46:04.687 1453 3121 W System.err: at com.funambol.client.engine.SyncEngine$SyncThread.sync(SyncEngine.java:443)
06-15 19:46:04.687 1453 3121 W System.err: at com.funambol.client.engine.SyncEngine$SyncThread.run(SyncEngine.java:421)
06-15 19:46:04.687 1453 3121 W System.err: Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity
06-15 19:46:04.687 1453 3121 W System.err: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:429)
06-15 19:46:04.687 1453 3121 W System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:595)
06-15 19:46:04.687 1453 3121 W System.err: ... 14 more
06-15 19:46:04.687 1453 3121 E SyncManager: SyncException
06-15 19:46:04.687 1453 3121 E SyncManager: com.funambol.sync.SyncException: java.io.IOException: org.apache.http.client.ClientProtocolException
06-15 19:46:04.687 1453 3121 E SyncManager: at com.funambol.syncml.spds.SyncManager.postRequest(SyncManager.java:1060)
06-15 19:46:04.687 1453 3121 E SyncManager: at com.funambol.syncml.spds.SyncManager.sync(SyncManager.java:610)
06-15 19:46:04.687 1453 3121 E SyncManager: at com.funambol.client.engine.SyncEngine.fireSync(SyncEngine.java:606)
06-15 19:46:04.687 1453 3121 E SyncManager: at com.funambol.client.engine.SyncEngine$SyncThread.synchronize(SyncEngine.java:530)
06-15 19:46:04.687 1453 3121 E SyncManager: at com.funambol.client.engine.SyncEngine$SyncThread.sync(SyncEngine.java:443)
06-15 19:46:04.687 1453 3121 E SyncManager: at com.funambol.client.engine.SyncEngine$SyncThread.run(SyncEngine.java:421)
06-15 19:46:04.727 1453 3121 D syncTime: sync saveSyncStatus use tiem=101638
06-15 19:46:04.727 1453 3121 D SyncManager: syncMode = 202, cancel=false, isFailed=true
06-15 19:46:04.727 1453 3121 D SyncLog : [CommonBaseUIController] -----------------endSession for failed
- Android客户端http请求使用的InputStreamEntity抛出异常ClientProtocolException解决办法
- httpclient请求时遇到org.apache.http.client.ClientProtocolException
- httpclient请求时遇到org.apache.http.client.ClientProtocolException
- 淘淘商城异常:org.apache.http.client.ClientProtocolException
- Android 使用android-async-http网络请求框架出现Header[]不识别错误的解决办法
- java 使用httpclient出错org.apache.http.client.ClientProtocolException
- 使用jexcel导入excel sheet时抛出空指针异常的解决办法
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE或者抛出UnsatisfiedLinkError异常的解决办法
- android下网络请求 connect 就抛出异常
- 【已解决】使用android-async-http网络请求框架出现Header[]不识别错误的解决办法
- 使用android真机测试http网络连接异常解决办法
- Android客户端捕获http请求包的方法【转】
- Android客户端捕获http请求包的方法
- Android客户端HTTP请求异常sendto failed: ECONNRESET (Connection reset by peer)解决方案
- WCF服务端抛出的异常会跑到客户端
- 对于Android的http请求的异常管理
- mvn -v 抛出异常解决办法
- 遍历Map时抛出java.util.ConcurrentModificationException异常的解决办法
- javascript 面向对象基础(四)面向对象的继承
- ORA-22922 :nonexistent LOB value解决方案
- 实验补做
- android 屏蔽系统自带键盘屏蔽KeyboardUtil
- 音频录制及其播放
- Android客户端http请求使用的InputStreamEntity抛出异常ClientProtocolException解决办法
- word文档因为文档保护而不能编辑的解决办法
- Android中的Interpolator(插值器)
- MD5摘要算法实现
- frame与bounds的区别比较
- Oracle 数据库系列 - SQL Plus SQL操作命令
- Java集合迭代器之fail-fast机制
- demo 整理
- 解决模拟请求问题