设置接口如下:

public interface IHttpService {    /**     * 获取userId     * @param params     * @return     */    @FormUrlEncoded    @POST("user/userid.do")    Call getUserById(@FieldMap(encoded = true) Mapparams);    /**     * 获取userId     * @param params     * @return     */    @FormUrlEncoded    @POST("user/login.do")    Call login(@FieldMap(encoded = true) Mapparams);}

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";        }    }




更多相关文章

  1. android ViewPager之OnPageChangeListener接口
  2. [置顶] Android 使用Hprose 调用Https接口
  3. JNI之------C调用java接口
  4. 【Android】Web开发之通过Apache接口处理Http请求
  5. 【Android】简单的接口回调
  6. 【APP】微信接口对Android与IOS验证方式的差异

随机推荐

  1. Android内存分析和调优(下)
  2. Android中Activity启动模式详解
  3. Android(安卓)Support Library 介绍~在项
  4. Android获取CPU使用率的几种方式
  5. Android禁止EditText自动弹出软键盘的方
  6. Android的线程使用来更新UI----View的几
  7. Android中的Data Binding初探 (三)
  8. [置顶] Android嵌入式开发
  9. Android(安卓)添加系统服务
  10. Android(安卓)窗口管理