全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Retrofit Rxjava实现图片下载、保存并展示实例

首先我们看一下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的实现类中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Retrofit  # Rxjava图片下载  # Rxjava实现图片下  # 基于Ok+Rxjava+retrofit实现断点续传下载  # Retrofit+RxJava实现带进度下载文件  # 基于Retrofit+Rxjava实现带进度显示的下载文件  # Retrofit+Rxjava下载文件进度的实现  # Retrofit+Rxjava实现文件上传和下载功能  # RxJava+Retrofit+OkHttp实现多文件下载之断点续传  # RxJava2.x+ReTrofit2.x多线程下载文件的示例代码  # Retrofit+RxJava实现带进度条的文件下载  # 的是  # 放在  # 还可以  # 是从  # 我们可以  # 来做  # 看一下  # 方法来  # 回调  # 大家多多  # 类中  # 下载图片  # 实现了  # 情况下  # 在实际  # addConverterFactory  # create  # GsonConverterFactory  # style  # span 


相关文章: 昆明高端网站制作公司,昆明公租房申请网上登录入口?  如何破解联通资金短缺导致的基站建设难题?  如何选择香港主机高效搭建外贸独立站?  专业网站建设制作报价,网页设计制作要考什么证?  建站之星如何实现PC+手机+微信网站五合一建站?  建站之星在线客服如何快速接入解答?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  定制建站是什么?如何实现个性化需求?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  如何通过多用户协作模板快速搭建高效企业网站?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  网站制作员失业,怎样查看自己网站的注册者?  SQL查询语句优化的实用方法总结  如何通过万网虚拟主机快速搭建网站?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  建站之星3.0如何解决常见操作问题?  个人摄影网站制作流程,摄影爱好者都去什么网站?  定制建站流程解析:需求评估与SEO优化功能开发指南  沈阳制作网站公司排名,沈阳装饰协会官方网站?  建站主机SSH密钥生成步骤及常见问题解答?  建站之星2.7模板:企业网站建设与h5定制设计专题  网站制作公司排行榜,抖音怎样做个人官方网站  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  网站代码制作软件有哪些,如何生成自己网站的代码?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何通过服务器快速搭建网站?完整步骤解析  如何高效利用200m空间完成建站?  常州自助建站工具推荐:低成本搭建与模板选择技巧  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  网站制作话术技巧,网站推广做的好怎么话术?  如何零基础开发自助建站系统?完整教程解析  南京网站制作费用,南京远驱官方网站?  济南专业网站制作公司,济南信息工程学校怎么样?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  如何通过智能用户系统一键生成高效建站方案?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  网站制作软件免费下载安装,有哪些免费下载的软件网站?  MySQL查询结果复制到新表的方法(更新、插入)  Python路径拼接规范_跨平台处理说明【指导】  山东网站制作公司有哪些,山东大源集团官网?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何快速生成凡客建站的专业级图册?  孙琪峥织梦建站教程如何优化数据库安全?  大连网站设计制作招聘信息,大连投诉网站有哪些? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。