zoukankan      html  css  js  c++  java
  • xUtils的文件下载与安装,xUtils的文件上传

     开篇报错注意:本教程是基于xUtils-2.6.14.jar版本实现的

    由于studio中6.0以后安卓取消了httpclient,而xutils则基于httpclient开发的,所以现在无法使用,将会有以下的错误

    Error:(55, 30) 错误: 无法访问HttpRequestBase

    找不到org.apache.http.client.methods.HttpRequestBase的类文件
    Error:(85, 30) 错误: 无法访问HttpEntityEnclosingRequest
    找不到org.apache.http.HttpEntityEnclosingRequest的类文件
    Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
    > Compilation failed; see the compiler error output for details.
    2 个错误
    :app:compileDebugJavaWithJavac FAILED

    解决方案:在使用xutils的modle的build.gradle的  android的下添加

     这句话:useLibrary 'org.apache.http.legacy'    即可解决

    xUtils的文件下载

        //这里Demo展示的是下载一个apk文件路径,下载后安装//其他文件可以删除文件的安装
        public void xUtilsHttpUtilDonLoadFile(String downLoadUrl, String savePath) {
            //保存位置
            //关于下边的File.separator原文The system-dependent string used to separate components in filenames ('/').
            //其实就是代表了一个斜杠
            final File filepath = new File(savePath + File.separator + "MyDownLoadText" + File.separator + downLoadUrl);//仅创建路径的File对象
            if (!filepath.exists()) {
                filepath.mkdir();//如果路径不存在就先创建路径
            }
            // 准备进度条Progress弹窗
            final ProgressDialog dialog = new ProgressDialog(this);
            dialog.setCancelable(true);// 设置是否可以通过点击Back键取消
            dialog.setTitle("下载中");
            //Progress弹窗设置为水平进度条
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置水平进度条
            //httputils网络请求工具
            HttpUtils http = new HttpUtils();
            //下载请求
            /*
                 第一参数:downLoadUrl是网络下载位置
                 第二参数:filepath.getPath()是下载保存位置
                第三个参数:如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
                第四个参数:如果从请求返回信息中获取到文件名,下载完成后自动重命名。
                第五个参数:下载的监听
             */
            HttpHandler handler = http.download(downLoadUrl, filepath.getPath(), true, true, new RequestCallBack<File>() {
                @Override
                public void onStart() {
                    dialog.show();//展示关闭弹窗
                    Log.i("", "onStart: 开始下载");
                }
                @Override
                public void onLoading(long total, long current, boolean isUploading) {
                    Log.i("下载中", "onLoading:总共: " + total + "已下" + current);
                    dialog.setMax((int) total);
                    dialog.setProgress((int) current);
                }
                @Override
                public void onSuccess(ResponseInfo<File> responseInfo) {
                    dialog.dismiss();//关闭弹窗
                    //安装下载的文件(如果不是apk这里可以不用安装,下载完成后自己看着办吧)
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(new File(filepath.getPath().toString())), "application/vnd.android.package-archive");
                    startActivity(intent);
                    //卸载
                      /*    Uri packageURI = Uri.parse("package:com.demo.CanavaCancel");//package:com.demo.CanavaCancel应用的包名
                            Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
                             startActivity(uninstallIntent);*/
                    Log.i("完成", "onStart: 下载完成");
                }
                @Override
                public void onFailure(HttpException error, String msg) {
                    dialog.dismiss();//关闭弹窗
                    Log.i("取消", "onStart: 下载失败" + error.toString());
                }
            });
        }

     xUtils的文件上传

     /*
            这里是 xUtils的文件post上传,
            url是上传到网络的位置
            userid是其他的参数
            filePath是要上传的文件位置
         */
        public  void  xUtilsUpLoadFile(String url,String userid,String filePath){
            //RequestParams对象是用来存放请求参数的
            RequestParams params = new RequestParams();
            params.addBodyParameter("userid",userid);//这里是一般的参数
            params.addBodyParameter("file",new File(filePath));//这里才是重点上传文件的参数
            //HttpUtils网络请求
            HttpUtils http = new HttpUtils();
            //发送请求
            /**
             * 第一个参数:请求方式
             *第二个参数:请求地址
             *第三个参数:请求携带的参数类
             *第四个参数:网络请求的监听
             */
            http.send(HttpRequest.HttpMethod.POST, url, params, new RequestCallBack<String>() {
                @Override
                public void onSuccess(ResponseInfo<String> responseInfo) {
                    Log.i(TAG, "onSucceed:上传结果 "+responseInfo.result);
                }
                @Override
                public void onFailure(HttpException e, String s) {
                    Log.i(TAG, "onFailure: 上传失败"+e.toString());
                }
            });
        }
  • 相关阅读:
    记录一次.Net框架Bug发现和提交过程:.Net Framework和.Net Core均受影响
    浅谈 Angular 项目实战
    Angular CLI 升级 6.0 之后遇到的问题
    构建具有用户身份认证的 Ionic 应用
    关于 Angular 跨域请求携带 Cookie 的问题
    使用 ng build 构建后资源地址引用错误的问题
    React 系列教程 1:实现 Animate.css 官网效果
    如何在已有的 Web 应用中使用 ReactJS
    关于浏览器后退操作与页面缓存问题
    三阶魔方公式速记
  • 原文地址:https://www.cnblogs.com/lizhanqi/p/5805901.html
Copyright © 2011-2022 走看看