【Android实战】----Android Retrofit2.1.0设置编码格式GBK
来源:互联网 发布:干了这碗恒河水 知乎 编辑:程序博客网 时间:2024/06/06 00:53
设置接口如下:
public interface IHttpService { /** * 获取userId * @param params * @return */ @FormUrlEncoded @POST("user/userid.do") Call<UserIdBean> getUserById(@FieldMap(encoded = true) Map<String, String>params); /** * 获取userId * @param params * @return */ @FormUrlEncoded @POST("user/login.do") Call<UserBean> login(@FieldMap(encoded = true) Map<String, String>params);}
retrofit中@FormUrlEncoded的默认编码方式为UTF-8,这个没法改变(目前本人所知,如有误请赐教),那么可以通过MediaType进行设置
/** * 添加统一header,超时时间,http日志打印 * @return */ public static OkHttpClient genericClient() { HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request(); Request.Builder requestBuilder = request.newBuilder(); request = requestBuilder.post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded;charset=GBK"), URLDecoder.decode(bodyToString(request.body()), "UTF-8"))) .build(); return chain.proceed(request); } }) .addInterceptor(logging) .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .build(); return httpClient; }如上设置了
"application/x-www-form-urlencoded;charset=GBK"
但是request.body()获取到的是已经是经过@FormUrlEncoded编码(UTF-8)过的,因此要先用UTF-8解码,再用GBK编码
bodyToString()的实现
private static String bodyToString(final RequestBody request) { try { final RequestBody copy = request; final Buffer buffer = new Buffer(); if (copy != null) copy.writeTo(buffer); else return ""; return buffer.readUtf8(); } catch (final IOException e) { return "did not work"; } }
0 0
- 【Android实战】----Android Retrofit2.1.0设置编码格式GBK
- android studio编码格式设置
- Android Studio设置编码格式
- android studio编码格式设置
- android studio 设置编码格式
- android 解析gbk编码格式的网络xml文件
- 在GeoServer设置文件编码格式GBK
- Android-->Rxjava与Retrofit2的结合实战
- Android Studio设置字体 编码格式
- Android Studio设置字体 编码格式
- Android Studio设置字体 编码格式
- android studio 项目编码格式的设置
- Android Studio设置字体 编码格式
- 在Android Studio中设置编码格式
- Android Studio文件换行格式与文件编码格式设置
- eclipse转android studio解决GBK编码转换为UTF-8格式的方法
- 【Android实战】----Android Retrofit2.1.0直接发送Json字符串到服务器
- Android之NDK编码转(UTF8->GBK)
- CentOS 6.8 64bit 环境 初始化 MySQL 5.7.17成功示例(验证时间2017-01-08)
- iOS MapKit的使用-LBS简单的租车主界面demo
- php实现多语言排序(按各自排序习惯排序)
- Android 解码MediaCodec 播放H264 265
- Android 笔记 快捷方式 / 桌面小组件
- 【Android实战】----Android Retrofit2.1.0设置编码格式GBK
- 详解JavaScript正则表达式之RegExp对象
- bootstrap 帮助文档 本地化站点部署记录
- 简单的安卓记事本
- gns3配置
- pgpool安装使用体会
- 设计模式--[11]策略模式
- mongo清洗id不唯一的脏数据,并创建唯一索引
- 针对自由开发者而言: 微信小程序, 是虚伪的繁荣.