Retrofit 使用过程中遇到的坑

Posted gone_1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 "";
}

以上是关于Retrofit 使用过程中遇到的坑的主要内容,如果未能解决你的问题,请参考以下文章

如何用ffmpeg截取视频片段&截取时间不准确的坑

android使用JSON遇到的坑(1)

汇总开发过程中遇到的坑

使用python requests库写接口自动化测试--记录学习过程中遇到的坑

使用phxpaxos开发过程中遇到的坑

Hexo 使用中搭建博客过程中遇到的坑