開篇報錯注意:本教程是基於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()); } }); }