Retrofit 使用过程中遇到的坑

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

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 "";}
时间: 2024-10-26 11:11:15

Retrofit 使用过程中遇到的坑的相关文章

爬取CVPR 2018过程中遇到的坑

爬取 CVPR 2018 过程中遇到的坑 使用语言及模块 语言: Python 3.6.6 模块: re requests lxml bs4 过程 一开始都挺顺利的,先获取到所有文章的链接再逐个爬取获取内容, 中间有一部分的是用正则进行匹配出想要的内容,写完了就想全部跑一遍试试吧. 爬到一半出错了,看了一下是这篇出问题了. 好吧,那就f12看看什么情况. emmmmm.... 跟之前的差不多啊... 直接复制下来匹配试试 ...都能匹配到啊... 直到....emmmm....看看不print出

ubuntu 换源过程中遇到的坑(一):Could not resolve &#39;mirrors.aliyun.com&#39;

执行更新数据(sudo apt-get update)提示: Err http://mirrors.aliyun.com trusty Release.gpg Could not resolve 'mirrors.aliyun.com' Err http://mirrors.aliyun.com trusty-updates Release.gpg Could not resolve 'mirrors.aliyun.com' Err http://mirrors.aliyun.com trust

谈 Kylin1.6 streaming kafka cube build 成功过程中遇到的坑

坑太多    --写在片首语 看着Kylin官网(http://kylin.apache.org/docs16/tutorial/cube_streaming.html)里的轻描淡写,似乎只要一步步按着它的步骤来做,就可以很快跑通并得到期待的果子 .但,然并卵...这次的实践让我很清醒地了解到, 在开源的世界里,真的是版本太多,bug太多,坑太多... 如果仅仅是阅读了文档一百遍,而并未去实践,那么也许仅仅阅读理解水平会提高不少.为了走完这一遍操作,得到期待的结果,居然cost 10 days!

Native项目迁入React-Native过程中遇到的坑(0.4x版本)

转载请注明出处王亟亟的大牛之路 最近都在忙着搭架子,找框架,谈需求和开会.甚至都没有时间好好装逼,昨天帮安卓的小伙把项目从安卓整体迁移到了RN的项目下面,过程中遇到很多不可描述的坑,这里给大家分享下经验 先安利,安卓收纳库:https://github.com/ddwhan0123/Useful-Open-Source-Android React-Native收纳库:https://github.com/ddwhan0123/Useful-Open-Source-React-Native 由来

Hive通过查询语句向表中插入数据过程中发现的坑

前言 最近在学习使用Hive(版本0.13.1)的过程中,发现了一些坑,它们或许是Hive提倡的比关系数据库更加自由的体现(同时引来一些问题),或许是一些bug.总而言之,这些都需要使用Hive的开发人员额外注意.本文旨在列举我发现的2个通过查询语句向表中插入数据过程中的问题,希望大家注意. 数据准备 为了验证接下来出现的问题,需要先准备两张表employees和staged_employees,并准备好测试数据.首先使用以下语句创建表employees: create table employ

【Angular JS】网站使用社会化评论插件,以及过程中碰到的坑

目前正在开发自己的网站,技术上使用Angular JS + Express JS + Mongo DB.由于网站会有文章发布,因此需要有评论功能.评论功能也可以自己开发,但由于现在社会化评论插件很多,因此没有必要多花精力,使用专业的就好. 1. 什么是社会化评论插件?都有哪些常用的插件? 社会化评论插件,指的就是无需自己开发评论功能,在自己网页上使用第三方的评论框,发出的评论将被保存在第三方的服务器上.使用时要在插件提供方官网上注册,注册好之后可获取实现功能的JS代码,以及将来可在官网上管理自己

在ubuntu18.0下安装qt4.7以及qt-creator安装过程中遇到的坑

最近的嵌入式Linux系统上要做课程设计= =要用贼老贼老的qt4.7,配环境踩坑都费了我1天时间.....所以记录下来,希望能给和我遇到相同问题的朋友一点帮助 apt-get install g++ apt-get install libglib2.0-dev libsm-dev libxrender libxrender-dev libfontconfig1-dev libxext-dev libgl1-mesa-dev libglu-dev xorg-dev libx11-dev libx

MySQL 5.7 安装过程中遇到的坑

在安装的过程中遇到了几个坑,特地记录下来.启动的时候会有有个错误: 大意为mysql退出且更新不了pid文件. 查看error.log,如图: 大意为ibdtata1文件不够,初始化的时候页数太大.初步判断为配置文件的配置参数问题. 将其改小或注释后解决. 初始化命令: bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/data         # Before MySQL 5.6 bin

Oracle RAC安装过程中碰到的“坑”和关键点(二)

(1) 依赖包的安装 Linux下安装Oracle,除了系统配置参数,我觉得依赖包的安装是另一个比较琐碎的操作. 本次安装碰到了几个包的问题: (a) rpm -Uvh gcc-4*提示: 02. error: Failed dependencies: 03.    cloog-ppl >= 0.15 is needed by gcc-4.4.7-4.el6.x86_64 04.    cpp = 4.4.7-4.el6 is needed by gcc-4.4.7-4.el6.x86_64 不