需求是请求返回的内容是Bitmap对象。就像下面的接口一样,返回的是Call<Bitmap>
public interface IUserService {
@POST("v1/info/getavatar")
Call<Bitmap> getAvatar(@HeaderMap Map<String, String> heads);
}
那么我们要怎么实现呢?
首先,只要处理Response Converter就可以了。Request依旧可以用Gson request body Converter。
同样要加上:
if(type != Bitmap.class){
return null;
}
public class BitmapConverterFactory extends Converter.Factory {
public @Nullable Converter<ResponseBody, ?> responseBodyConverter(
Type type, Annotation[] annotations, Retrofit retrofit) {
if(type != Bitmap.class){
return null;
}
return new BitmapResponseConverter();
}
public @Nullable
Converter<?, RequestBody> requestBodyConverter(
Type type,
Annotation[] parameterAnnotations,
Annotation[] methodAnnotations,
Retrofit retrofit) {
return GsonConverterFactory.create().requestBodyConverter(type, parameterAnnotations, methodAnnotations, retrofit);
}
public @Nullable Converter<?, String> stringConverter(
Type type, Annotation[] annotations, Retrofit retrofit) {
return null;
}
}
其次,实现BitmapResponseConverter
public class BitmapResponseConverter implements Converter<ResponseBody, Bitmap> {
@Override
public Bitmap convert(ResponseBody value) throws IOException {
byte[] bytes = value.bytes();
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
return bitmap;
}
}
好了,bitmap converter就简单的完成了。这篇文章,也就是为了加深对Converter的理解。
另外,还有很多对Converter的变异。 比如,需要对传输的内容加密, 那么在GsonConverter的基础上再写一个EncryptionGsonConverter,把gsonRequestConverter/gsonResponseConverter的内容加解密一下就好了。