安卓使用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));
        }
    }



}
相关推荐
毕设源码-赖学姐2 小时前
【开题答辩全过程】以 基于Android的校园快递互助APP为例,包含答辩的问题和答案
java·eclipse
Tom4i2 小时前
Android 系统的进程模型
android
damo012 小时前
stripe 支付对接
java·stripe
介一安全2 小时前
【Frida Android】基础篇9:Java层Hook基础——Hook构造函数
android·网络安全·逆向·安全性测试·frida
杨筱毅2 小时前
【Android】Compose绘制系统 VS 传统View绘制系统
android
介一安全2 小时前
【Frida Android】基础篇10:Native层Hook基础--普通 Hook
android·网络安全·逆向·安全性测试·frida
麦麦鸡腿堡3 小时前
Java的单例设计模式-饿汉式
java·开发语言·设计模式
假客套3 小时前
Request method ‘POST‘ not supported,问题分析和解决
java
傻童:CPU3 小时前
C语言需要掌握的基础知识点之前缀和
java·c语言·算法
爱吃山竹的大肚肚3 小时前
@Valid校验 -(Spring 默认不支持直接校验 List<@Valid Entity>,需用包装类或手动校验。)
java·开发语言