用xutils3.0進(jìn)行下載項(xiàng)目更新
xUtils簡(jiǎn)介
xUtils 包含了很多實(shí)用的android工具。
xUtils 支持大文件上傳,更全面的http請(qǐng)求協(xié)議支持(10種謂詞),擁有更加靈活的ORM,更多的事件注解支持且不受混淆影響...
xUitls 最低兼容android 2.2 (api level 8)
目前xUtils主要有四大模塊:
DbUtils模塊:
android中的orm框架,一行代碼就可以進(jìn)行增刪改查;
支持事務(wù),默認(rèn)關(guān)閉;
可通過注解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時(shí)候請(qǐng)注解表名和列名);
支持綁定外鍵,保存實(shí)體時(shí)外鍵關(guān)聯(lián)實(shí)體自動(dòng)保存或更新;
自動(dòng)加載外鍵關(guān)聯(lián)實(shí)體,支持延時(shí)加載;
支持鏈?zhǔn)奖磉_(dá)查詢,更直觀的查詢語(yǔ)義,參考下面的介紹或sample中的例子。
ViewUtils模塊:
android中的ioc框架,完全注解方式就可以進(jìn)行UI,資源和事件綁定;
新的事件綁定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20種事件綁定,參見ViewCommonEventListener類和包c(diǎn)om.lidroid.xutils.view.annotation.event。
HttpUtils模塊:
支持同步,異步方式的請(qǐng)求;
支持大文件上傳,上傳大文件不會(huì)oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請(qǐng)求;
下載支持301/302重定向,支持設(shè)置是否根據(jù)Content-Disposition重命名下載的文件;
返回文本內(nèi)容的請(qǐng)求(默認(rèn)只啟用了GET請(qǐng)求)支持緩存,可設(shè)置默認(rèn)過期時(shí)間和針對(duì)當(dāng)前請(qǐng)求的過期時(shí)間。
BitmapUtils模塊:
加載bitmap的時(shí)候無需考慮bitmap加載過程中出現(xiàn)的oom和android容器快速滑動(dòng)時(shí)候出現(xiàn)的圖片錯(cuò)位等現(xiàn)象;
支持加載網(wǎng)絡(luò)圖片和本地圖片;
內(nèi)存管理使用lru算法,更好的管理bitmap內(nèi)存;
可配置線程加載線程數(shù)量,緩存大小,緩存路徑,加載顯示動(dòng)畫等...
以上說這么多都是為下文做鋪墊,下面步入主題:
寫的例子比較簡(jiǎn)單,是用xutils3.0來進(jìn)行下載項(xiàng)目更新
1.先通過網(wǎng)絡(luò)請(qǐng)求,判斷版本是否要更新
2.若要更新,則彈出一個(gè)彈窗,我用的是系統(tǒng)自帶的Dialog,將下載的版本號(hào)及下載的內(nèi)容提示展示出來
3.當(dāng)用戶點(diǎn)擊下載時(shí),開始下載,下載時(shí)展示一個(gè)水平的進(jìn)度條
4.下載完成后,進(jìn)度條消失,調(diào)用系統(tǒng)安裝apk
如下是代碼 用到的xutils的jar包是3.3.32版本的
package com.item.weixin; import java.io.File; import org.json.JSONException; import org.json.JSONObject; import org.xutils.x; import org.xutils.common.Callback; import org.xutils.http.RequestParams; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.Window; import android.widget.Button; /** * 設(shè)置xutils下載 * * @author Administrator * */ public class LoginActivity extends Activity { private Button ll_update; private ProgressDialog pDialog; private String nowVersion; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_login); ll_update = (Button) findViewById(R.id.btn_login); ll_update.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub checkUpdate(); } }); try { PackageInfo packageInfo = getPackageManager().getPackageInfo( getPackageName(), 0); nowVersion = packageInfo.versionName; } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 下載更新, */ protected void checkUpdate() { // TODO Auto-generated method stub proDialogShow(LoginActivity.this, "正在查詢..."); RequestParams params = new RequestParams("url"); x.http().get(params, new Callback.CommonCallback<String>() { @Override public void onCancelled(CancelledException arg0) { // TODO Auto-generated method stub } @Override public void onError(Throwable arg0, boolean arg1) { // TODO Auto-generated method stub PDialogHide(); System.out.println("提示網(wǎng)絡(luò)錯(cuò)誤"); } @Override public void onFinished() { // TODO Auto-generated method stub } @Override public void onSuccess(String arg0) { // TODO Auto-generated method stub PDialogHide(); try { JSONObject object = new JSONObject(arg0); boolean success = object.getBoolean("succee"); if (success) { String desc = object.getString("desc"); String downloadurl = object.getString("downloadurl"); String versionname = object.getString("versionname"); if (nowVersion.equals(versionname)) { System.out.println("當(dāng)前版本為最新,不用跟新"); } else { // 不同,彈出更新提示對(duì)話框 setUpDialog(versionname, downloadurl, desc); } } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } /** * * @param versionname * 地址中版本的名字 * @param downloadurl * 下載包的地址 * @param desc * 版本的描述 */ protected void setUpDialog(String versionname, final String downloadurl, String desc) { // TODO Auto-generated method stub AlertDialog dialog = new AlertDialog.Builder(this).setCancelable(false) .setTitle("下載" + versionname + "版本").setMessage(desc) .setNegativeButton("取消", null) .setPositiveButton("下載", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub setDownLoad(downloadurl); } }).create(); dialog.show(); } /** * 下載包 * * @param downloadurl * 下載的url * */ @SuppressLint("SdCardPath") protected void setDownLoad(String downloadurl) { // TODO Auto-generated method stub RequestParams params = new RequestParams(downloadurl); params.setAutoRename(true);//斷點(diǎn)下載 params.setSaveFilePath("/mnt/sdcard/demo.apk"); x.http().get(params, new Callback.ProgressCallback<File>() { @Override public void onCancelled(CancelledException arg0) { // TODO Auto-generated method stub } @Override public void onError(Throwable arg0, boolean arg1) { // TODO Auto-generated method stub if(progressDialog!=null && progressDialog.isShowing()){ progressDialog.dismiss(); } System.out.println("提示更新失敗"); } @Override public void onFinished() { // TODO Auto-generated method stub } @Override public void onSuccess(File arg0) { // TODO Auto-generated method stub if(progressDialog!=null && progressDialog.isShowing()){ progressDialog.dismiss(); } Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.fromFile(new File(Environment .getExternalStorageDirectory(), "demo.apk")), "application/vnd.android.package-archive"); startActivity(intent); } @Override public void onLoading(long arg0, long arg1, boolean arg2) { // TODO Auto-generated method stub progressDialog.setMax((int)arg0); progressDialog.setProgress((int)arg1); } @Override public void onStarted() { // TODO Auto-generated method stub System.out.println("開始下載"); progressDialog = new ProgressDialog(LoginActivity.this); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設(shè)置為水平進(jìn)行條 progressDialog.setMessage("正在下載中..."); progressDialog.setProgress(0); progressDialog.show(); } @Override public void onWaiting() { // TODO Auto-generated method stub } }); } private void proDialogShow(Context context, String msg) { pDialog = new ProgressDialog(context); pDialog.setMessage(msg); // pDialog.setCancelable(false); pDialog.show(); } private void PDialogHide() { try { if (pDialog != null && pDialog.isShowing()) { pDialog.dismiss(); } } catch (Exception e) { e.printStackTrace(); } } }
以上所述是小編給大家介紹的用xutils3.0進(jìn)行下載項(xiàng)目更新,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- xUtils3.0框架學(xué)習(xí)筆記分享
- Java常用正則表達(dá)式驗(yàn)證工具類RegexUtils.java
- Android XUtils3框架的基本使用方法(二)
- Android中XUtils3框架使用方法詳解(一)
- Android xUtils更新到3.0后的基本使用規(guī)則詳解
- 使用Android的OkHttp包實(shí)現(xiàn)基于HTTP協(xié)議的文件上傳下載
- Android基于Http協(xié)議實(shí)現(xiàn)文件上傳功能的方法
- android文件上傳示例分享(android圖片上傳)
- Android中發(fā)送Http請(qǐng)求(包括文件上傳、servlet接收)的實(shí)例代碼
- Android使用xUtils3.0實(shí)現(xiàn)文件上傳
相關(guān)文章
5分鐘快速實(shí)現(xiàn)Android爆炸破碎酷炫動(dòng)畫特效的示例
本篇文章主要介紹了5分鐘快速實(shí)現(xiàn)Android爆炸破碎酷炫動(dòng)效的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12Android NotificationManager簡(jiǎn)單使用詳解
這篇文章主要為大家詳細(xì)介紹了Android NotificationManager的簡(jiǎn)單使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11淺談Android為RecyclerView增加監(jiān)聽以及數(shù)據(jù)混亂的小坑
下面小編就為大家?guī)硪黄獪\談Android為RecyclerView增加監(jiān)聽以及數(shù)據(jù)混亂的小坑。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04Android應(yīng)用退出登錄的實(shí)現(xiàn)方法
每一個(gè)app都會(huì)有一個(gè)”退出登陸”的功能,當(dāng)點(diǎn)擊退出之后需要將所有的Activity都finish掉,開始是想將棧中的所有Activity清除掉,但是沒有找到方法,后來用廣播實(shí)現(xiàn)了。下面小編給大家分享android應(yīng)用退出登錄的實(shí)現(xiàn)方法,需要的朋友參考下2017-04-04Android中用Bmob實(shí)現(xiàn)短信驗(yàn)證碼功能的方法詳解
本文給大家分享通過第三方平臺(tái)Bmob實(shí)現(xiàn)發(fā)送驗(yàn)證碼和校驗(yàn)驗(yàn)證碼的功能,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09Flutter實(shí)現(xiàn)頂部導(dǎo)航欄功能
這篇文章主要為大家詳細(xì)介紹了Flutter實(shí)現(xiàn)頂部導(dǎo)航欄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07Android中Notification 提示對(duì)話框
Notification,俗稱通知,是一種具有全局效果的通知,它展示在屏幕的頂端,首先會(huì)表現(xiàn)為一個(gè)圖標(biāo)的形式,當(dāng)用戶向下滑動(dòng)的時(shí)候,展示出通知具體的內(nèi)容2016-01-01Android 實(shí)現(xiàn)沉浸式狀態(tài)欄的方法
沉浸式狀態(tài)欄的來源就是很多手機(jī)用的是實(shí)體按鍵,沒有虛擬鍵,于是開了沉浸模式就只有狀態(tài)欄消失了。下面腳本之家小編給大家介紹Android 實(shí)現(xiàn)沉浸式狀態(tài)欄,需要的朋友可以參考下2015-09-09