xUtils簡介
xUtils 包含了很多實用的android工具。
xUtils 支持大文件上傳,更全面的http請求協議支持(10種謂詞),擁有更加靈活的ORM,更多的事件注解支持且不受混淆影響...
xUitls 最低兼容android 2.2 (api level 8)
目前xUtils主要有四大模塊:
DbUtils模塊:
android中的orm框架,一行代碼就可以進行增刪改查;
支持事務,默認關閉;
可通過注解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時候請注解表名和列名);
支持綁定外鍵,保存實體時外鍵關聯實體自動保存或更新;
自動加載外鍵關聯實體,支持延時加載;
支持鏈式表達查詢,更直觀的查詢語義,參考下面的介紹或sample中的例子。
ViewUtils模塊:
android中的ioc框架,完全注解方式就可以進行UI,資源和事件綁定;
新的事件綁定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20種事件綁定,參見ViewCommonEventListener類和包com.lidroid.xutils.view.annotation.event。
HttpUtils模塊:
支持同步,異步方式的請求;
支持大文件上傳,上傳大文件不會oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請求;
下載支持301/302重定向,支持設置是否根據Content-Disposition重命名下載的文件;
返回文本內容的請求(默認只啟用了GET請求)支持緩存,可設置默認過期時間和針對當前請求的過期時間。
BitmapUtils模塊:
加載bitmap的時候無需考慮bitmap加載過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象;
支持加載網絡圖片和本地圖片;
內存管理使用lru算法,更好的管理bitmap內存;
可配置線程加載線程數量,緩存大小,緩存路徑,加載顯示動畫等...
以上說這么多都是為下文做鋪墊,下面步入主題:
寫的例子比較簡單,是用xutils3.0來進行下載項目更新
1.先通過網絡請求,判斷版本是否要更新
2.若要更新,則彈出一個彈窗,我用的是系統自帶的Dialog,將下載的版本號及下載的內容提示展示出來
3.當用戶點擊下載時,開始下載,下載時展示一個水平的進度條
4.下載完成后,進度條消失,調用系統安裝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;/*** 設置xutils下載* * @author Administrator* */public class LoginActivity extends Activity {private Button ll_update;private ProgressDialog pDialog;private String nowVersion;private ProgressDialog progressDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubcheckUpdate();}});try {PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);nowVersion = packageInfo.versionName;} catch (NameNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 下載更新,*/protected void checkUpdate() {// TODO Auto-generated method stubproDialogShow(LoginActivity.this, "正在查詢...");RequestParams params = new RequestParams("url");x.http().get(params, new Callback.CommonCallback<String>() {@Overridepublic void onCancelled(CancelledException arg0) {// TODO Auto-generated method stub}@Overridepublic void onError(Throwable arg0, boolean arg1) {// TODO Auto-generated method stubPDialogHide();System.out.println("提示網絡錯誤");}@Overridepublic void onFinished() {// TODO Auto-generated method stub}@Overridepublic void onSuccess(String arg0) {// TODO Auto-generated method stubPDialogHide();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("當前版本為最新,不用跟新");} else {// 不同,彈出更新提示對話框setUpDialog(versionname, downloadurl, desc);}}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}/*** * @param versionname* 地址中版本的名字* @param downloadurl* 下載包的地址* @param desc* 版本的描述*/protected void setUpDialog(String versionname, final String downloadurl,String desc) {// TODO Auto-generated method stubAlertDialog dialog = new AlertDialog.Builder(this).setCancelable(false).setTitle("下載" + versionname + "版本").setMessage(desc).setNegativeButton("取消", null).setPositiveButton("下載", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {// TODO Auto-generated method stubsetDownLoad(downloadurl);}}).create();dialog.show();}/*** 下載包* * @param downloadurl* 下載的url* */@SuppressLint("SdCardPath")protected void setDownLoad(String downloadurl) {// TODO Auto-generated method stubRequestParams params = new RequestParams(downloadurl);params.setAutoRename(true);//斷點下載params.setSaveFilePath("/mnt/sdcard/demo.apk");x.http().get(params, new Callback.ProgressCallback<File>() {@Overridepublic void onCancelled(CancelledException arg0) {// TODO Auto-generated method stub}@Overridepublic void onError(Throwable arg0, boolean arg1) {// TODO Auto-generated method stubif(progressDialog!=null && progressDialog.isShowing()){progressDialog.dismiss();}System.out.println("提示更新失敗");}@Overridepublic void onFinished() {// TODO Auto-generated method stub}@Overridepublic void onSuccess(File arg0) {// TODO Auto-generated method stubif(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);}@Overridepublic void onLoading(long arg0, long arg1, boolean arg2) {// TODO Auto-generated method stubprogressDialog.setMax((int)arg0);progressDialog.setProgress((int)arg1);}@Overridepublic void onStarted() {// TODO Auto-generated method stubSystem.out.println("開始下載");progressDialog = new ProgressDialog(LoginActivity.this);progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設置為水平進行條progressDialog.setMessage("正在下載中...");progressDialog.setProgress(0);progressDialog.show();}@Overridepublic 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進行下載項目更新,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
新聞熱點
疑難解答
圖片精選