zoukankan      html  css  js  c++  java
  • Retrofit 使用过程中遇到的坑

    1.  添加本地缓存时,post 方式的请求不缓存。

      http://www.jianshu.com/p/7aa8f3443e05

    2. @Body 方式提交数据时,会转成 json 形式提交, 而不是键值对。

    自定义 GsonConverterFactory ,主要是 GsonRequestBodyConverter 类。

    final class GsonRequestBodyConverter<T> implements Converter<T, RequestBody> {
    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");
    private static final Charset UTF_8 = Charset.forName("UTF-8");

    private final Gson gson;
    private final TypeAdapter<T> adapter;

    GsonRequestBodyConverter(Gson gson, TypeAdapter<T> adapter) {
    this.gson = gson;
    this.adapter = adapter;
    }

    @Override public RequestBody convert(T value) throws IOException {
    Buffer buffer = new Buffer();
    buffer.read(UrlFormedUtils.getFormUrlEncoded(value).getBytes());
    return RequestBody.create(MEDIA_TYPE, buffer.readByteString());
    }
    }

    // 把对象转为url 键值对。

    public static <T> String getFormUrlEncoded(T t){
    String cls1 = t.getClass().getName();
    StringBuffer sb = new StringBuffer();
    try {
    Class<?> cls = Class.forName(cls1);
    Field[] fields = cls.getDeclaredFields();
    for(Field field:fields){
    if (field.isSynthetic()) {
    continue;
    }
    if (field.getName().equals("serialVersionUID")) {
    continue;
    }
    field.setAccessible(true);
    if(field.get(t)!=null && !TextUtils.isEmpty(field.get(t).toString())){
    sb.append("&").append(field.getName()).append("=").append(field.get(t));
    }
    }
    Class<?> superCls = cls.getSuperclass();
    if(!superCls.getSimpleName().equals("Object")){
    fields = superCls.getDeclaredFields();
    for(Field field:fields){
    if (field.isSynthetic()) {
    continue;
    }
    if (field.getName().equals("serialVersionUID")) {
    continue;
    }
    field.setAccessible(true);
    if(field.get(t)!=null && !TextUtils.isEmpty(field.get(t).toString())){
    sb.append("&").append(field.getName()).append("=").append(field.get(t));
    }
    }
    }
    return sb.toString();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return "";
    }
  • 相关阅读:
    黑盒测试实践——每日例会记录(一)
    《高级软件测试》—如何计算团队成员贡献分
    TestLink学习——第一周使用小结
    BugkuCTF 你必须让他停下
    BugkuCTF 域名解析
    BugkuCTF web3
    BugkuCTF 矛盾
    BugkuCTF web基础$_POST
    BugkuCTF web基础$_GET
    BugkuCTF 计算器
  • 原文地址:https://www.cnblogs.com/songsh/p/6526989.html
Copyright © 2011-2022 走看看