Android xUtils3下載檔案的使用
阿新 • • 發佈:2019-02-10
xUtils3簡介
xUtils 包含了orm, http(s), image, view註解, 但依然很輕量級(246K), 並且特性強大, 方便擴充套件:
- 穩定的基石: AbsTask和統一的回撥介面Callback, 任何異常, 即使你的回撥方法實現有異常都會進入onError, 任何情況下onFinished總會讓你知道任務結束了.
- 基於高效穩定的orm工具, http模組得以更方便的實現cookie(支援domain, path, expiry等特性)和 快取(支援Cache-Control, Last-Modified, ETag等特性)的支援.
- 有了強大的http及其下載快取的支援, image模組的實現相當的簡潔, 並且支援回收被view持有, 但被Mem Cache移除的圖片, 減少頁面回退時的閃爍.
- view註解模組僅僅400多行程式碼卻靈活的支援了各種View注入和事件繫結, 包括擁有多了方法的listener的支援.
本文基於xUtils3實現從伺服器下載檔案(Apk)的功能,其中,xUtils3網路模組大大方便了在實際開發中網路模組的開發,xUtils3網路模組大致包括GET請求、POST請求、如何使用其他請求方式、上傳檔案、下載檔案、使用快取等功能,下面將對下載檔案進行使用說明::
整合xUtils3,使用Gradle構建時新增一下依賴即可
compile 'org.xutils:xutils:3.5.0'
加入所需要的許可權宣告;
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />- 初始化建立建Application,並在AndroidManifest.xml檔案中進行配置
public class MyMobileApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);
x.Ext.setDebug(BuildConfig.DEBUG); // 是否輸出debug日誌, 開啟debug會影響效能.
}
}
AndroidManifest.xml檔案中配置如下:
<application
android:name=".MyMobileApplication"
......
android:theme="@style/AppTheme">
<activity android:name=".activity.SplashActivity">
......
</activity>
</application>
- 下載功能的實現,這裡以下載我們自己Tomcat上的Apk為例進行說明
/**
* 下載伺服器端更新後最新的apk
*/
private void downloadUpdateApk() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
mProgressDialog = new ProgressDialog(SplashActivity.this);
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
// mDownloadUrl為JSON從伺服器端解析出來的下載地址
RequestParams requestParams = new RequestParams(mDownloadUrl);
// 為RequestParams設定檔案下載後的儲存路徑
requestParams.setSaveFilePath(path);
// 下載完成後自動為檔案命名
requestParams.setAutoRename(true);
x.http().get(requestParams, new Callback.ProgressCallback<File>() {
@Override
public void onSuccess(File result) {
Log.i(tag, "下載成功");
mProgressDialog.dismiss();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.i(tag, "下載失敗");
mProgressDialog.dismiss();
}
@Override
public void onCancelled(CancelledException cex) {
Log.i(tag, "取消下載");
mProgressDialog.dismiss();
}
@Override
public void onFinished() {
Log.i(tag, "結束下載");
mProgressDialog.dismiss();
}
@Override
public void onWaiting() {
// 網路請求開始的時候呼叫
Log.i(tag, "等待下載");
}
@Override
public void onStarted() {
// 下載的時候不斷回撥的方法
Log.i(tag, "開始下載");
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
// 當前的下載進度和檔案總大小
Log.i(tag, "正在下載中......");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setMessage("正在下載中......");
mProgressDialog.show();
mProgressDialog.setMax((int) total);
mProgressDialog.setProgress((int) current);
}
});
}
}
程式執行示例圖如下:
參考文章: