美文网首页
android okhttp下载文件

android okhttp下载文件

作者: hao_developer | 来源:发表于2020-09-21 10:20 被阅读0次
 /**
     * 下载文件
     */
    fun downFile(url:String,listener:OnDownloadListener){
        val request = Request.Builder().url(url).build();
        OkHttpClient().newCall(request).enqueue(object : Callback{
            override fun onFailure(call: Call, p: IOException) {
                listener.onFail()
            }

            override fun onResponse(call: Call, response: Response) {
                var `is`:InputStream? = null
                val buf = ByteArray(2048)
                var len = 0
                var fos:FileOutputStream? = null
                var saveFile:File? = null
                try {
                    `is` = response.body()?.byteStream()
                    val total = response.body()?.contentLength() ?: 1
                    saveFile =
                        File(PublicTools.tools.getDir().toString() + File.separator + "jxih.apk")
                    if (saveFile == null){
                        listener.onFail()
                        return
                    }
                    if (saveFile.exists())saveFile.delete()
                    fos = FileOutputStream(saveFile)
                    var sum = 0
                    while ((`is`?.read(buf).also { len = it ?: 0 }) != -1) {
                        fos?.write(buf,0,len)
                        sum += len
                        val progress = (sum * 1f / total * 100).toInt()
                        listener.onProgress(progress)
                    }
                    fos.flush();
                    // 下载完成
                    listener.onSuccess(saveFile);
                }catch (e:Exception){
                    e.printStackTrace()
                    listener.onFail()
                }finally {
                    try {
                        `is`?.close()
                    }catch (e:IOException){
                        e.printStackTrace()
                    }
                    try {
                        fos?.close()
                    }catch (e:IOException){
                        e.printStackTrace()
                    }
                }
            }
        })

    }
fun getDir(): File {
        val dir = File(Environment.getExternalStorageDirectory().absolutePath, "应用名")
        if (!dir.exists()) {
            dir.mkdirs()
        }
        return dir
    }

\color{red}{**要记得加文件权限**}

相关文章

网友评论

      本文标题:android okhttp下载文件

      本文链接:https://www.haomeiwen.com/subject/outvyktx.html