安卓使用okhttpfinal下载文件,附带线程池下载使用

1.导入okhttp包

复制代码
implementation 'cn.finalteam:okhttpfinal:2.0.7'

2.单个下载

复制代码
package com.example.downloading;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

import java.io.File;

import cn.finalteam.okhttpfinal.FileDownloadCallback;
import cn.finalteam.okhttpfinal.HttpRequest;
import cn.finalteam.okhttpfinal.OkHttpFinal;
import cn.finalteam.okhttpfinal.OkHttpFinalConfiguration;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //先初始化okhttp
        OkHttpFinalConfiguration.Builder builder = new OkHttpFinalConfiguration.Builder();
        OkHttpFinal.getInstance().init(builder.build());

        findViewById(R.id.Play_videos_and_pictures).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Download("https:...../2_0ee2238f8f8cd7b3773cc6d82dafb756.mp4",
                        new File("/storage/emulated/0/Download/2adfed77da173f.mp4"));
            }
        });
    }


    public static void Download(final String url, final File saveFile) {
        Log.e("TAG","url===="+url);
        Log.e("TAG","saveFile===="+saveFile.getAbsolutePath());
        HttpRequest.download(url, saveFile, new FileDownloadCallback() {
            //开始下载
            @Override
            public void onStart() {
                super.onStart();
            }

            //下载进度
            @Override
            public void onProgress(int progress, long networkSpeed) {
                super.onProgress(progress, networkSpeed);
                Log.e("TAG", "进度值是:" + progress);
            }

            //下载失败
            @Override
            public void onFailure() {
                super.onFailure();
                Log.e("TAG", "下载失败的地址是:" + url);
            }

            //下载完成(下载成功)
            @Override
            public void onDone() {
                super.onDone();
                Log.e("TAG", "成功下载的地址是:" + saveFile.getAbsolutePath());
            }
        });
    }
}

3.使用线程池下载

复制代码
package com.example.downloading;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

import java.io.File;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import cn.finalteam.okhttpfinal.FileDownloadCallback;
import cn.finalteam.okhttpfinal.HttpRequest;
import cn.finalteam.okhttpfinal.OkHttpFinal;
import cn.finalteam.okhttpfinal.OkHttpFinalConfiguration;

public class MainActivity extends AppCompatActivity {


    private static ExecutorService executor;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        OkHttpFinalConfiguration.Builder builder = new OkHttpFinalConfiguration.Builder();
        OkHttpFinal.getInstance().init(builder.build());

        executor = Executors.newFixedThreadPool(5); // 创建一个拥有5个线程的线程池
        
        findViewById(R.id.Play_videos_and_pictures).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Showdownload("https:.........mp4",
                                "/storage/emulated/0/Download/2adfed77da173f.mp4");

            }
        });
    }


    public static void Download(final String url, final File saveFile) {
        Log.e("TAG","url===="+url);
        Log.e("TAG","saveFile===="+saveFile.getAbsolutePath());
        HttpRequest.download(url, saveFile, new FileDownloadCallback() {
            //开始下载
            @Override
            public void onStart() {
                super.onStart();
            }

            //下载进度
            @Override
            public void onProgress(int progress, long networkSpeed) {
                super.onProgress(progress, networkSpeed);
                Log.e("TAG", "进度值是:" + progress);
            }

            //下载失败
            @Override
            public void onFailure() {
                super.onFailure();
                Log.e("TAG", "下载失败的地址是:" + url);
            }

            //下载完成(下载成功)
            @Override
            public void onDone() {
                super.onDone();
                Log.e("TAG", "成功下载的地址是:" + saveFile.getAbsolutePath());
            }
        });
    }




    //设置多个下载
    private void Showdownload(String imageUrl, String imagepath) {
        //直接使用全局的线程池来执行下载任务,避免重复创建线程池
        for (int i1 = 0; i1 < 10; i1++) {
            executor.execute(new DownloadImageTask(imageUrl, imagepath));
        }
    }

    // 下载任务类
    class DownloadImageTask implements Runnable {
        private String imageUrl;
        private String imagepath;

        public DownloadImageTask(String imageUrl, String imagepath) {
            this.imageUrl = imageUrl;
            this.imagepath = imagepath;
        }

        @Override
        public void run() {
            // 使用网络请求库下载文件
            Download(imageUrl, new File(imagepath));
        }
    }



}
相关推荐
野犬寒鸦32 分钟前
力扣hot100:相交链表与反转链表详细思路讲解(160,206)
java·数据结构·后端·算法·leetcode
ytadpole1 小时前
揭秘设计模式:工厂模式的五级进化之路
java·设计模式
计算机毕业设计木哥1 小时前
计算机毕设选题:基于Python+Django的B站数据分析系统的设计与实现【源码+文档+调试】
java·开发语言·后端·python·spark·django·课程设计
失散131 小时前
分布式专题——1.2 Redis7核心数据结构
java·数据结构·redis·分布式·架构
inmK11 小时前
蓝奏云官方版不好用?蓝云最后一版实测:轻量化 + 不限速(避更新坑) 蓝云、蓝奏云第三方安卓版、蓝云最后一版、蓝奏云无广告管理工具、安卓网盘轻量化 APP
android·工具·网盘工具
giaoho1 小时前
Android 热点开发的相关api总结
android
用户3721574261352 小时前
Python 实现 HTML 转 Word 和 PDF
java
a587692 小时前
Java核心概念精讲:TCP与UDP的区别、Java NIO的几个核心组件与HTTP和HTTPS的区别等(46-50)
java·面试·nio
渣哥2 小时前
ConcurrentHashMap 的 get 要不要加锁?一次“多此一举”的心路历程
java
愿你天黑有灯下雨有伞2 小时前
一种基于注解与AOP的Spring Boot接口限流防刷方案
java·spring boot·后端