先来一段我们经常写的代码
private void createRetrofit(){
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(getHttpClient(getAppIntercepter(),getCache(App.getAppContext())))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
怎么样是不是很简单啊!那大家有没有想过为何addConverterFactory??我当时的理解是addConverterFactory让其支持Gson解析,能让返回的数据直接转换成实体对象
现在的理解:
在请求阶段,我可以将@Body的请求操作做操作,对返回的数据做一定操作例如转换成Gson
返回数据转换器
例如我需要定义一个自己的数据类型转换器?比如数据返回String类型的,可以仿造GsonConverterFactory的写法,进行编写
1:首先定义StringResponseBodyConverter
final class StringResponseBodyConverter implements Converter<ResponseBody, String> {
public static final StringResponseBodyConverter INSTANCE =new StringResponseBodyConverter();
@Override
public String convert(ResponseBody value) throws IOException {
Log.d("wyz", "转换开始:" + value);
String s = value.string();
return s;
}
}
ResponseBody就是请求网络数据反馈的数据,他是一个流哦,convert方法就是返回的需要对数据处理,进行返回的数据
2:定义StringConverFactory
public class StringConverFactory extends Converter.Factory {
public static StringConverFactory create() {
return new StringConverFactory();
}
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
Retrofit retrofit) {
Log.d("wyz", "读取数据:respo