toorup 发表于 2020-12-1 16:19:34

(二)准备学学类库了,没有教程,只能自已摸索

接上一贴:https://www.eruyi.cn/thread-9668-1-1.html
上一贴我们已经实现了更新过程中所需用到的初始化下载路径和取下载信息,算是一个还算完整的实用类库了。但在使用中,我们还需要用到下载的类库,这就不太完美了,我们最终是要实现我们的更新类库,检查到有更就,就自已下载,下载完了,就自已安装,不用到借助别的类库来实现,所以这里我们就得实现下载功能,下载功能是独立的,在这里我们就先来搞一个最简单的下载类库!

开搞!靠,不会,没头绪啊!
网络搜索是万能的,我们找一找JAVA下载文件的方法,看来看去,用框架xutils这个方便快捷简单易搞,

下载到了一个xutils-2.6.14.jar包,我们在资源中导入:


接下来我们就想办法调用了,根据网上搜来的方法,下载文件需引用以下几块:

import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import java.io.File;

接口,我们给一个调用和完成、失败、进度这三个事件接口就够用了,如下:



下载过程,我们直接用xutils的http.download就可以了,(我们可以解压缩打开xutils包看看里面的结构,这个对理解和使用jar包比较有帮助)

创建httputils,下载:

      HttpUtils http = new HttpUtils();
      String webPath = string;


      http.download(webPath,string2,false,false,new RequestCallBack<File>(){
                                        //下载路径,保存路径,断点续传,自动重命名
                  @Override
                  public void onSuccess(ResponseInfo<File> responseInfo){
                                                下载Impl.this.下载完毕();
                                        }
                       

                  @Override
                  public void onLoading(long total, long current, boolean isUploading) {
                                                long 进度=current*100/total;
                                                下载Impl.this.下载进度改变(total,current,进度);
                                        }
                       

                  @Override
                  public void onFailure(HttpException e, String s){

                                        }


这里要说一下这个断点续传和自动命名,我们都false,断点续传如果是TRUE,每次启动就会接着上次的下载,如果有一个完整的文件,那他就不下载了。
自动重命名,这个就更得关掉了,不然他给你启一个很长又没有规律的名字,这个在后续自动安装的时候麻烦。

做好接口的触发:
public void 下载完毕(){
      EventDispatcher.dispatchEvent(this,"下载完毕");
        }
       
        public void 下载失败(){
            EventDispatcher.dispatchEvent(this,"下载失败");
        }
       
       
       public void 下载进度改变(long 总大小, long 已下载, long 进度){
      EventDispatcher.dispatchEvent(this,"下载进度改变",总大小,已下载,进度);
        }


这里说一下@Override,这个在上一贴里有看到,这里没写,其实这个可写可不写,我试了试是这样的。
但写着好一些,在抽象类里有接口的,我们就写上,没有接口事件的,这里就不写,这样有一个好处,就是试着编译查错的时候,写了,就会提示你抽象类里有没有漏写这个接口。

到这里我们的下载类库就可以编译发布使用了,试了试,效果挺好。

类库源码也发一下:


接下来我们下一次就开始把这个下载和前面的更新拼合到一起搞成一个完整的更新类库了。



toorup 发表于 2020-12-1 16:19:57

先占个楼

lishangwl 发表于 2020-12-1 17:11:06

下一个类库大佬准备诞生

as6836660 发表于 2020-12-1 17:40:01

下一任类库开发大佬即将诞生

toorup 发表于 2020-12-1 17:48:21

lishangwl 发表于 2020-12-1 17:11
下一个类库大佬准备诞生

toorup 发表于 2020-12-1 17:50:13

as6836660 发表于 2020-12-1 17:40
下一任类库开发大佬即将诞生

欢迎多多指点,有错处误处别见笑

蓝色天空 发表于 2020-12-1 20:10:14

学习学习

ganice 发表于 2020-12-1 23:12:18

学习学习了

大飞工作室 发表于 2020-12-2 00:03:29

易如意中文编程学习交流论坛有你更精彩~

eruyivip 发表于 2020-12-2 00:07:03

易如意中文编程学习交流论坛有你更精彩~
页: [1] 2 3
查看完整版本: (二)准备学学类库了,没有教程,只能自已摸索