之前没有用过retrofit请求,前两天心血来潮想着把手头的项目改成retrofit+rxjava的形式,但是项目的数据请求和返回都是经过压缩和加密的,并不是传统的json串,如果在返回的结果中处理会显得比较繁琐,然后就想着能不能使用inspector来进行处理,通过对interceptor测试最后发现不可行,于是就想着能不能有其他的实现方式,通过网络上的搜索发现了converter,通过测试最终实现了想要的结果。现将实现的过程分享出来。
通过对retrofit的了解,发现在创建retrofit时可以添加addCallAdapterFactory()方法,正常的返回json串是可以指定其为GsonConverterFactory.create(),然后配合在接口中定义的类型转换成相应的类型,这里是在网上请求得到的数据是zip的数据流,所以需要自定义一个ConverterFacttory。
在自定义的factory中重写responseBodyConverter
@Override
publicConverterresponseBodyConverter(Typetype,Annotation[]annotations,
Retrofitretrofit) {
Log.d("test","responseBodyConverter1111111111111");
TypeAdapteradapter=gson.getAdapter(TypeToken.get(type));
returnnewMyJsonResponseBodyConverter<>(gson,adapter);//返回自定义的returnnewMyJson惹
}
然后自定义ResponseBodyConverter,在ResponseBodyConverter里处理得到的响应数据
@Override
publicTconvert(ResponseBodyresponseBody)throwsIOException{
return (T)value;
}
这里是对数据进行解密和解压,然后返回处理好的数据,这里返回的是我们预先写好的接收返回数据的model类
然后再去运行程序成功了