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());
            }
        });
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM