AI智能
改变未来

Android Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 四 文件下载(图片下载为例)


Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 一 框架配置

Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 二 请求数据

Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 三 文件上传(支持多文件上传)

Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 四 下载文件

1.添加下载地址接口

@GET@Streamingfun downloadImg(@Url imgUrl: String): Observable<ResponseBody>

2.添加请求方法实例

/*** 指定线程下载文件(异步),非阻塞式下载** @param url       图片url**/private fun downloadFile(url: String) {RetrofitHelper.getApi().downloadImg(url).subscribeOn(Schedulers.io()).observeOn(Schedulers.newThread()).subscribe(object : DisposableObserver<ResponseBody?>() {override fun onNext(responseBody: ResponseBody) {var bitmap: Bitmap? = nullval bys: ByteArraytry {bys = responseBody.bytes()bitmap = BitmapFactory.decodeByteArray(bys, 0, bys.size)if (bitmap == null) {return}try {Utils.saveImg(bitmap, \"本地路径\",   \"文件名称\"  )} catch (e: IOException) {e.printStackTrace()}} catch (e: IOException) {e.printStackTrace()}bitmap?.recycle()}override fun onError(e: Throwable) {//下载异常}override fun onComplete() {//下载完成}})}

3.保存到本地

/*** 保存图片到SD卡** @param bm         图片bitmap对象* @param floderPath 下载文件保存目录* @param fileName   文件名称(不带后缀)*/fun saveImg(bm: Bitmap, floderPath: String, fileName: String) {//如果不保存在sd下面下面这几行可以不加if (Environment.getExternalStorageState() != Environment.MEDIA_MOUNTED) {return}val folder = File(floderPath)if (!folder.exists()) {folder.mkdirs()}val savePath = floderPath + File.separator + fileName + \".jpg\"val file = File(savePath)val bos = BufferedOutputStream(FileOutputStream(file))bm.compress(Bitmap.CompressFormat.JPEG, 80, bos)bos.flush()bos.close()}
注意:这里的代码需要前面的配置支持,希望伙伴们可以看下第一篇, 在整个框架配置完成之后 后面的操作都很简单,有问题的地方或者有什么问题,大家可以留言
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Android Retrofit2+rxjava2+Mvp基于okhttp3网络请求框架的使用 四 文件下载(图片下载为例)