首先我们看一下Retrofit常规的用法,在不使用Rxjava的情况下,我们默认返回的是Call。
public interface ServiceApi { //下载文件 @GET Call<ResponseBody> downloadPicFromNet(@Url String fileUrl); }
但是如果我们要配合Rxjava使用,那么就要按照如下方式来重新定义我们的方法:
@GET Observable<ResponseBody> downloadPicFromNet(@Url String fileUrl);
返回一个Observable,方法名很直观就是从网络下载图片 参数是图片的URL路径
完成请求接口的定义,我们接下来创建Retrofit 对象
Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //添加Rxjava .addConverterFactory(GsonConverterFactory.create()) // <span style="font-family: Arial, Helvetica, sans-serif;">定义转化器 可以将结果返回一个json格式</span> .build();
接下来我们给刚才定义的ServiceApi创建实例,通过上面创建的retrofit来创建
ServiceApi serviceApi = retrofit.create(ServiceApi.class);
ok,现在我们可以通过serviceApi来调用我们刚才定义的 downloadPicFromNet方法来下载一张图片,可以随意百度一张图片,复制图片地址来做测试。
serviceApi.downloadPicFromNet("http://pic41.nipic.com/20140509/4746986_145156378323_2.jpg") .subscribeOn(Schedulers.newThread())//在新线程中实现该方法 .map(new Func1<ResponseBody, Bitmap>() { @Override public Bitmap call(ResponseBody arg0) { if(saveFileToDisc(arg0)) {//保存图片成功 Bitmap bitmap = BitmapFactory.decodeFile(getExternalFilesDir(null) + File.separator + "baidu.png"); return bitmap;//返回一个bitmap对象 } return null; } }) .observeOn(AndroidSchedulers.mainThread())//在Android主线程中展示 .subscribe(new Subscriber<Bitmap>() { ProgressDialog dialog = new ProgressDialog(MainActivity.this); @Override public void onStart() { dialog.show(); super.onStart(); } @Override public void onCompleted() { dialog.dismiss(); } @Override public void onError(Throwable arg0) { Log.d(TAG, "onError ===== " + arg0.toString()); } @Override public void onNext(Bitmap arg0) { imageIv.setImageBitmap(arg0); } });
上面的示例就实现了一个下载、保存、并展示的过程,跟传统的AsyncTask相比,代码很简洁,没有很多回调。当然在实际使用中还可以封装一层,把Retrofit 和 ServiceApi 的创建放在一个ServiceApiImpl的实现类中。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Python OpenCV实现裁剪并保存图片,包括了Python OpenCV实现裁剪并保存图片的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Python OpenCV实现裁剪并保存图片的具体代码,供大家参考,具体内容如下 问题描述 从图片中选出某一区域,Enter保存 1.jpg 代码 PS:x,y为ROI的坐标,w,h为ROI的大小 效果 敲击Enter 得到图片
本文向大家介绍Android中Glide加载图片并实现图片缓存,包括了Android中Glide加载图片并实现图片缓存的使用技巧和注意事项,需要的朋友参考一下 今天工作中遇到Glide的缓存问题,之前在项目中一直用Glide加载本地及网络图片,但是没有考虑过缓存的问题,但是需求中需要提到了,所以在网上查了一下,再这里和大家简单的分享一下Glide的使用方法以及缓存 首先,Glide是Github上
图片下载和存取的简单demo。实现同步和异步两种下载方式。并且将下载好的图片保存在Document,然后进行读取显示。 [Code4App.com]
本文向大家介绍Android sdcard实现图片存储 、联网下载,包括了Android sdcard实现图片存储 、联网下载的使用技巧和注意事项,需要的朋友参考一下 本文实例介绍了sdcard存储图片下载简单操作,分享给大家供大家参考,具体内容如下 步骤 -- 在配置清单添加完联网权限后 1、res/layout界面布局 2、有2个类一个操作SDCARD的文件工具类(FileUtil)另外一个M
本文向大家介绍JS实现图片高亮展示效果实例,包括了JS实现图片高亮展示效果实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现图片高亮展示效果的方法。分享给大家供大家参考,具体如下: 昨天朋友让我帮着做个图片高亮展示的效果,虽然不难,不过满有创意的: 刚开始因为没有完全明白设计意图,阴差阳错的做了个这样的效果: 希望本文所述对大家JavaScript程序设计有所帮助。
本文向大家介绍PHP实现下载远程图片保存到本地的方法,包括了PHP实现下载远程图片保存到本地的方法的使用技巧和注意事项,需要的朋友参考一下 在使用 PHP 做简单的爬虫的时候,我们经常会遇到需要下载远程图片的需求,所以下面来简单实现这个需求。 1.使用 curl 比如我们有下面这两张图片: 第一步,我们可以直接来使用最简单的代码实现: 那在下载远程图片的时候就可以这样: 2.封装一个类 缕清思路之