Retrofit(七) BitmapCoverterFactory

需求是请求返回的内容是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的内容加解密一下就好了。

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值