Android开发okhttp下载图片带进度

news/2024/9/25 15:32:33/
okhttp_0">Android开发okhttp下载图片带进度

下载网络图片的方法有很多,这次介绍写用okhttp来下载网络图片,主要我看中的是用okhttp下载有进度返回,提示下用户

一、思路:

用OkHttpClient().newCall(request)

二、效果图:

在这里插入图片描述

三、关键代码:
// 联系:893151960
fun download(mContext: Context,url: String,fileName:String,fileType:String, listener:(Int, Int,String) -> Unit) {// 需要token的时候可以这样做// Request request = new Request.Builder().header("token",token).url(url).build();val request: Request = Request.Builder().url(url).build()OkHttpClient().newCall(request).enqueue(object : Callback {override fun onFailure(call: Call, e: IOException) {e.printStackTrace()listener(0,2,"")}override fun onResponse(call: Call, response: Response) {listener(0,3,"")var inputStream: InputStream? = nullval buf = ByteArray(2048)var len: Int = -1var fos: FileOutputStream? = nulltry {inputStream = response.body?.byteStream()val total: Long = response.body?.contentLength()!!val file = File(getSandboxPath(mContext,fileType), fileName)fos = FileOutputStream(file)var sum: Long = 0while ((inputStream?.read(buf) ?: -1).also { len = it } != -1) {fos.write(buf, 0, len)sum += len.toLong()(sum * 1.0f / total * 100).toInt().let {if(it > progress){progress = itlistener(it,0,"")}}}fos.flush()listener(0,1,file.path)} catch (e: Exception) {listener(0,2,"")} finally {try {inputStream?.close()fos?.close()} catch (e: IOException) {e.printStackTrace()}}}})}
四、完整项目demo结构图:

在这里插入图片描述有问题或者需要完整源码的私信我


http://www.ppmy.cn/news/1530342.html

相关文章

物业管理小程序开发

物业小程序的开发是一个综合性的项目,旨在提升物业管理效率和增强业主的服务体验。以下是关于物业小程序开发的一些关键方面: 一、需求分析 目标用户:识别主要用户群体,包括业主、租户、物业管理人员等。 功能需求: 物…

Linux-TCP重传

问题描述: 应用系统进行切换,包含业务流量切换(即TongWeb主备切换)和MYSQL数据库主备切换。首先进行流量切换,然后进行数据库主备切换。切换后发现备机TongWeb上有两批次慢请求,第一批慢请求响应时间在133…

鸿蒙 OS 开发零基础快速入门教程

视频课程: 东西比较多, 这里主要分享一些代码和案例. 开关灯效果案例: 开灯 开关灯效果案例: 关灯 Column 和 Row 的基本用法 Entry Component struct Index {State message: string 张三;build() {// 一行内容Row() {// 一列内容Column() {// 文本内容Text(this.mess…

物联网迎来下半场,国产 IoTOS 打造企业级智能硬件云服务平台

如有需求,文末联系小编 氦氪云 IoTOS 是一套先进的企业级物联网解决方案平台,为万物互联提供可靠安全稳定的终端接入、协议适配、消息路由、数据存储和分析、应用使能等核心功能。面向物联网领域中的终端设备商、系统集成商、应用服务商、能力提供商等&a…

使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息

要使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息,你可以按以下步骤来实现: 目录 1. 前端 (React Material-UI) 2. 后端 (Spring Boot MyBatis MySQL) 3. 模拟实时位置数据 4. 前后端联调 1. 前端 (React Mat…

PHP API 框架:构建高效API的利器【电商API接口】

在当今快速发展的互联网时代,API(应用程序编程接口)已成为连接不同应用程序和服务的关键。PHP,作为一种流行的服务器端脚本语言,提供了多种强大的框架来简化API的开发。本文将介绍PHP API框架的重要性,以及…

mysqli_fetch_object() 和 mysqli_fetch_array() 函数的区别

mysqli_fetch_object() mysqli_fetch_object() 函数用于从结果集中取得一行作为对象返回。这个对象反映了数据库表中的一行,其中对象的属性对应着表的列名。这个函数对于面向对象编程(OOP)的 PHP 开发者来说非常方便,因为它允许你…

TikTok直播推流不精准该怎么办?跟IP有关系吗?

TikTok,这款风靡全球的短视频社交平台,其直播功能已成为众多创作者与品牌宣传的利器。然而,不少用户却遭遇了直播推流不精准的难题,这直接影响到直播的曝光和互动效果。那么,面对这一问题,我们该如何应对&a…