Android Retrofit Post请求参数长度限制问题 retrofit sendto failed: ECONNRESET (Connection reset by ...

千次阅读
retrofit sendto failed: ECONNRESET (Connection reset by peer)【android客户端Post请求参数长度限制(参数过大)】解决办法 一、问题的出现 post请求后台,当参数字符太长超过900字时会报sendto failed: ...
retrofit sendto failed: ECONNRESET (Connection reset by peer)【android客户端Post请求参数长度限制(参数过大)】解决办法
一、问题的出现
post请求后台,当参数字符太长超过900字时会报sendto failed: ECONNRESET (Connection reset by peer)错误,stroke找了很多问题结果没几个人回答,回答的也不能解决问题;
发现问题:原来,是我对Retrofit的@QueryMap() Mapparams不是很理解,使用@QueryMap()会直接放在post请求的data里面更url一起拼接,url请求有长度限制(浏览器、服务器等都有可能);
解决问题:最后发现了Retrofit2.0中还有一个@FieldMap,这个参数就是给我们的表单提交所使用的,我们是使用的是POST请求,使用FieldMap会将请求的参数封装在Request的Body中,理论上POST请求是没有长度限制的。
Post请求
@FormUrlEncoded
@POST("postService")
CallpostModelService(@Field("msg") String msg, @Field("string") boolean isString);
Retrofit中的Post请求则需要将前面的@GET注解换成@POST注解,而Post请求的文本参数则用注解@Field来声明,同时还必须给方法添加注解@FormUrlEncoded来告知Retrofit参数为表单参数,如果只为参数增加@Field注解,而不给方法添加@FormUrlEncoded注解运行时会抛异常。
如果Post请求有很多参数同样也可以使用集合的方式进行声明
@FormUrlEncoded
@POST("{path}")
CallpostModelService(@Path("path") String path, @FieldMap Mapmap);
Retrofit中提供了注解@FieldMap用来声明一个Map类型的集合作为Post请求的表单参数
Post请求的服务接口声明完成之后,讲得到的Call对象调用execute或者enqueue即可发起同步或异步的Post请求
最近做了个Android请求获取Java后端数据的例子,简单实现了一下。 源代码下载:Android请求获取Java后端数据,登录界面例子 主要实现: 1、java后端 2、Android代码
参数说明: // path请求路径 // json 封装好的json数据,关于封装json数据的方法,最下面有。 public static String JsonPost(final String path, final JSONObject json) { BufferedReader in = null; ...