Retrofit(重构——图片下载)

这篇文章主要介绍如何下载一张图片,有人可能说服务器都已经返回http的url图片地址给我了,我只要用glide、imageloader或者一些其他的图片加载工具就能获取到图片了,非也非也,就如博主之前公司,图片请求给的是图片的id,而不是url地址,比如2015_01_13_06af17b6-9b0f-11e4-a040-00163e020b37,根据id去请求图片,原理就是跟下载文件一样,下面贴上代码。

  UpXlGetFile upXlGetFile = new UpXlGetFile();
        upXlGetFile.setU("xxxxxx");
        upXlGetFile.setK("xxxxxx");
        upXlGetFile.setF("2015_01_13_06af17b6-9b0f-11e4-a040-00163e020b37");
        upXlGetFile.setS("o");
        Gson gson = new Gson();
        String str = gson.toJson(upXlGetFile);
        String baseStr = Base64.encodeToString(str.getBytes(),
                Base64.DEFAULT);
        RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), baseStr);
        Subscription subscription = clientApi.getXlGetFile(requestBody)
                .compose(SchedulersCompat.<ResponseBody>applyIoSchedulers())
                .subscribe(new Subscriber<ResponseBody>() {
                    @Override
                    public void onCompleted() {
                        hideLoadingDialog();
                    }

                    @Override
                    public void onError(Throwable e) {  
                        showToast("更新失败");
                        hideLoadingDialog();      
                    }

                    @Override
                    public void onNext(ResponseBody responseBody) {
                        boolean writtenToDisk = writeResponseBodyToDisk(responseBody);
                    }
                });
会发现,跟之前的登录没什么两样,当然,都是数据的请求,只是变了一些参数而已,就连api接口也几乎一样。
    @Multipart
    @POST("/xl/file_get")
    Observable<ResponseBody> getXlGetFile(@Part("p") RequestBody requestBody);

细心的人就会发现了,为啥现在返回的是ResponseBody了,说好的Response呢?我们将ResponseBody作为了返回类型。Retrofit会试图解析并转换它,所以你不能使用任何其他返回类型,否则当你下载文件的时候,是毫无意义的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值