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()}
注意:这里的代码需要前面的配置支持,希望伙伴们可以看下第一篇, 在整个框架配置完成之后 后面的操作都很简单,有问题的地方或者有什么问题,大家可以留言