设置接口如下:

  1. public interface IHttpService {
  2. /**
  3. * 获取userId
  4. * @param params
  5. * @return
  6. */
  7. @FormUrlEncoded
  8. @POST("user/userid.do")
  9. Call<UserIdBean> getUserById(@FieldMap(encoded = true) Map<String, String>params);
  10. /**
  11. * 获取userId
  12. * @param params
  13. * @return
  14. */
  15. @FormUrlEncoded
  16. @POST("user/login.do")
  17. Call<UserBean> login(@FieldMap(encoded = true) Map<String, String>params);
  18. }

retrofit中@FormUrlEncoded的默认编码方式为UTF-8,这个没法改变(目前本人所知,如有误请赐教,那么可以通过MediaType进行设置

/**

  1. * 添加统一header,超时时间,http日志打印
  2. * @return
  3. */
  4. public static OkHttpClient genericClient() {
  5. HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
  6. logging.setLevel(HttpLoggingInterceptor.Level.BODY);
  7. OkHttpClient httpClient = new OkHttpClient.Builder()
  8. .addInterceptor(new Interceptor() {
  9. @Override
  10. public okhttp3.Response intercept(Chain chain) throws IOException {
  11. Request request = chain.request();
  12. Request.Builder requestBuilder = request.newBuilder();
  13. request = requestBuilder.post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded;charset=GBK"),
  14. URLDecoder.decode(bodyToString(request.body()), "UTF-8")))
  15. .build();
  16. return chain.proceed(request);
  17. }
  18. })
  19. .addInterceptor(logging)
  20. .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
  21. .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
  22. .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
  23. .build();
  24. return httpClient;
  25. }

如上设置了

"application/x-www-form-urlencoded;charset=GBK"

但是request.body()获取到的是已经是经过@FormUrlEncoded编码(UTF-8)过的,因此要先用UTF-8解码,再用GBK编码

bodyToString()的实现

  1. private static String bodyToString(final RequestBody request) {
  2. try {
  3. final RequestBody copy = request;
  4. final Buffer buffer = new Buffer();
  5. if (copy != null)
  6. copy.writeTo(buffer);
  7. else
  8. return "";
  9. return buffer.readUtf8();
  10. } catch (final IOException e) {
  11. return "did not work";
  12. }
  13. }

出处http://blog.csdn.net/honghailiang888。

Android Retrofit2.1.0设置编码格式GBK的更多相关文章

  1. Maven打包编译错误工作区间设置编码格式gbk可以utf-8不可以

    转自:https://blog.csdn.net/wolf_love666/article/details/52593483 问题:Maven打包编译错误工作区间设置编码格式gbk可以utf-8不可以 ...

  2. [Unity][安卓]Unity和Android Studio 3.0 交互通讯(1)Android Studio 3.0 设置

    [安卓]Android Studio 3.0 JDK安卓环境配置(2017.10) http://blog.csdn.net/bulademian/article/details/78387052 [ ...

  3. 如何在android studio 1.0 启动时设置代理【解决WARN - ateSettings.impl.UpdateChecker - Connection failed.】

    今天第一次用android studio,下了个比较新的1.0.1 linux版本,结果启动时老是出现以下错误: [ 6987] WARN - ateSettings.impl.UpdateCheck ...

  4. android studio 2.0 Gradle HttpProxy 设置

    Android Studio 一直Failed to import Gradle project: Connection timed out: connect Android Studio 2.0 里 ...

  5. Android Studio 1.0.2 设置内存大小

    http://www.linuxidc.com/Linux/2015-04/116457.htm Android studio 1.0.2默认最大内存是750M,这样跑起来非常的卡,难以忍受,机器又不 ...

  6. Android Retrofit 2.0 使用-补充篇

    推荐阅读,猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava 4.RxBus 5.Android MVP+Retrofit+RxJava实践小 ...

  7. Android Studio 2.0使用指南

    一.下载界面.[无激活码 无序列码 无毒请放心使用][需将JAVA程序升级到1.8] 网址:http://www.android-studio.org/index.php/download/andro ...

  8. Android中的颜色设置

    1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如 public static final class color { public static final int lightb ...

  9. Android Studio 1.0.2项目实战——从一个APP的开发过程认识Android Studio

    Android Studio 1.0.1刚刚发布不久,谷歌紧接着发布了Android Studio 1.0.2版本,和1.0.0一样,是一个Bug修复版本.在上一篇Android Studio 1.0 ...

随机推荐

  1. []转帖] 浅谈Linux下的五种I/O模型

    浅谈Linux下的五种I/O模型 https://www.cnblogs.com/chy2055/p/5220793.html  一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是 ...

  2. linux_软件安装

    一.在线安装(apt) APT是Advance Packaging Tool(高级包装工具)的缩写,APT可以自动下载,配置,安装二进制或者源代码格式的软件包,简化了Unix系统上管理软件的过程. 1 ...

  3. 序列化与反序列化,json,pickle,xml,shelve,configparser模块

    序列化与反序列化 什么是序列化?序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输.反序列化就是将硬盘中或者网络中传来的一种数据格式转换成内存中数据结构. 为什么要有? 1.可以 ...

  4. linux系统下find命令的使用

    1.find /* -name erlang 当前目录下,查找名为erlang的文件和目录 find /* -name rabbitmq-server 当前目录下,查找名为 rabbitmq-serv ...

  5. jquery 加載

    load(url,data,callback)從遠程服務器加載數據,并放入到被選中元素上: url是必須有的,希望加載的url: data是可選的,表示和請求一起發送的鍵值對數據: callback是 ...

  6. codeforces625C

    K-special Tables CodeForces - 625C 人们经常做一些疯狂的事来凸显自己.有的人跳舞,有的人撩妹,有的人立志成为顶级程序猿(例如某peng),还有的人喜欢收集有趣的数学对 ...

  7. LightOJ - 1341 Aladdin and the Flying Carpet (算术基本定理)

    题意: 就是....求a的所有大于b的因子有多少对 算术基本定理求 所有因子 阿欧...偷张图. 注意范围 就好  ..... 解析: 在1 -1012的范围内求大于b的所有a的因子的对数(有几对) ...

  8. 胡小兔的 PKUSC2018 游记

    Day 0 一番纠结之后,我还是选择了 PKUSC (Penguin Kingdom University Summer Camp, 企鹅王国大学夏令营)! 理由?扔硬币决定的理由如下: PKU好啊 ...

  9. 洛谷 P4174 [NOI2006]最大获利 解题报告

    P4174 [NOI2006]最大获利 题目描述 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU 集团旗下的 CS&T 通讯公司在新一代通讯技术血战的前夜,需要 ...

  10. outline与border的区别

    在浏览器里,当鼠标点击或使用Tab键让一个链接或者一个radio获得焦点的时候,该元素将会被一个轮廓虚线框围绕.这个轮廓虚线框就是 outline . outline 能告诉用户那一个可以激发事件的h ...