本文主要介绍用xutils3.0下载项目更新的相关资料,很不错,有参考价值。有需要的朋友可以参考一下。
xUtils简介
XUtils包含了很多实用的android工具。
XUtils支持大文件上传,更全面的http请求协议支持(10个谓词),更灵活的ORM,更多的事件注释支持,不会混淆。
XUitls至少兼容android 2.2 (api level 8)。
目前xUtils主要有四大模块:
DbUtils模块:
android中的Orm框架,一行代码即可增删查;
交易支持,默认关闭;
可以自定义表名、列名、外键、唯一性约束、NOT NULL约束、检查约束等。by标注(需要混淆时请标注表名和列名);
支持绑定外键,保存实体时自动保存或更新与外键关联的实体;
自动加载外键关联实体,并支持延迟加载;
支持链式表达式查询,更直观的查询语义,参考下面的介绍或者sample中的例子。
ViewUtils模块:
android中的ioc框架可以完全注释的方式绑定UI、资源和事件;
新的事件绑定方法在与混淆工具混淆后仍然可以正常工作;
目前支持20种常用的事件绑定。请参见ViewCommonEventListener类和包com . lid roid . xutils . view . annotation . event。
HttpUtils模块:
支持同步和异步请求;
支持大文件上传,上传大文件不会oom;
支持GET、POST、PUT、MOVE、COPY、DELETE、HEAD、OPTIONS、TRACE、CONNECT请求;
支持下载301/302重定向,支持根据Content-Disposition设置是否重命名下载的文件;
返回文本内容的请求(默认情况下只启用GET请求)支持缓存,并且可以设置默认的过期时间和当前请求的过期时间。
BitmapUtils模块:
加载位图时,无需考虑加载位图过程中的oom现象和android容器快速滑动时图像的错位。
支持加载网络图片和本地图片;
内存管理使用lru算法更好的管理位图内存;
可配置线程加载线程数、缓存大小、缓存路径、加载显示动画等。
以上说这么多都是为下文做铺垫,下面步入主题:
写例子比较简单,用xutils3.0下载项目更新。
1.首先,通过网络请求,确定版本是否需要更新。
2.如果要更新,会弹出一个弹出窗口。我使用系统自己的对话框来显示下载的版本号和下载的内容提示。
3.当用户点击下载时,开始下载,下载时显示水平进度条。
4.下载完成后,进度条消失,系统被调用安装apk。
以下代码中使用的xutils的jar包版本是3.3.32。
包com . item . weixin;
导入Java . io . file;
导入org . JSON . JSON exception;
导入org . JSON . JSON object;
导入org . xutils . x;
导入org . xutils . common . callback;
导入org . xutils . http . request params;
导入Android . annotation . suppress lint;
导入Android . app . activity;
导入Android . app . alert dialog;
导入Android . app . progress dialog;
导入Android . content . context;
导入Android . content . dialog interface;
导入Android . content . intent;
导入Android . content . pm . package info;
导入Android . content . pm . package manager . namenotfoundexception;
导入Android . net . uri;
导入Android . OS . bundle;
导入Android . OS . environment;
导入Android . view . view;
导入Android . view . window;
导入Android . widget . button;
/**
*设置xutils下载
*
* @作者管理员
*
*/
公共类LoginActivity扩展Activity {
私按钮ll _ update
私有ProgressDialog pDialog
私有字符串nowVersion
私有ProgressDialog progressDialog
@覆盖
受保护的void onCreate(Bundle saved instancestate){
//TODO自动生成的方法存根
super . oncreate(savedInstanceState);
requestWindowFeature(窗口。特征_编号_标题);
setContentView(r . layout . activity _ log in);
ll _ update=(Button)findViewById(r . id . BTN _ log in);
ll_update.setOnClickListener(新视图。OnClickListener() {
@覆盖
public void onClick(View arg0) {
//TODO自动生成的方法存根
check update();
}
});
尝试{
package info package info=getPackageManager()。getPackageInfo(
getPackageName(),0);
现在版本=包信息。版本名称;
} catch(NameNotFoundException e){
//TODO自动生成的捕捉块
e。printstacktrace();
}
}
/**
* 下载更新,
*/
受保护的void checkUpdate() {
//TODO自动生成的方法存根
proDialogShow(loginactivity。“这,”正在查询.');
request params params=新请求参数(' URL ');
x.http()。get(params,新回调commoncallbackring(){
@覆盖
公共取消时无效(取消的异常参数0){
//TODO自动生成的方法存根
}
@覆盖
public void on error(Throwable arg 0,boolean arg1) {
//TODO自动生成的方法存根
PDialogHide();
System.out.println('提示网络错误');
}
@覆盖
public void onFinished() {
//TODO自动生成的方法存根
}
@覆盖
成功时公共void(字符串参数0){
//TODO自动生成的方法存根
PDialogHide();
尝试{
JSON object object=new JSON object(arg 0);
布尔成功=对象。获取布尔值(“succee”);
如果(成功){
字符串desc=对象。getstring(“desc”);
字符串下载URL=object。getstring(“下载URL”);
字符串版本名称=对象。getstring(“版本名”);
如果(现在版本。等于(版本名)){
System.out.println('当前版本为最新,不用跟新');
}否则{
//不同,弹出更新提示对话框
setUpDialog(versionname,downloadurl,desc);
}
}
} catch (JSONException e) {
//TODO自动生成的捕捉块
e。printstacktrace();
}
}
});
}
/**
*
* @param版本名称
* 地址中版本的名字
* @param downloadurl
* 下载包的地址
* @帕拉姆desc
* 版本的描述
*/
受保护的void setUpDialog(字符串版本名称,最终字符串downloadurl,
字符串desc) {
//TODO自动生成的方法存根
报警对话框=新报警对话框。建筑商(这个)。setCancelable(false)。setTitle('下载'版本名称'版本').setMessage(desc)。setNegativeButton('取消,空)。setPositiveButton('下载,新的对话界面OnClickListener() {
@覆盖
public void onClick(dialog interface arg 0,int arg1) {
//TODO自动生成的方法存根
设置下载(下载网址);
}
}).create();
对话。show();
}
/**
* 下载包
*
* @param downloadurl
* 下载的全球资源定位器(统一资源定位器)
*
*/
@SuppressLint('SdCardPath ')
受保护的无效集下载(字符串下载URL){
//TODO自动生成的方法存根
request params params=新请求参数(下载URL);
参数。setautorename(true);//断点下载
参数。setsavefilepath('/mnt/SD卡/demo。apk’);
x.http()。get(params,新回调ProgressCallbackFile() {
@覆盖
公共取消时无效(取消的异常参数0){
//TODO自动生成的方法存根
}
@覆盖
public void on error(Throwable arg 0,boolean arg1) {
//TODO自动生成的方法存根
if(progressDialog!=空进度对话框。正在显示()){
进度对话框。dissolve();
}
System.out.println('提示更新失败');
}
@覆盖
public void onFinished() {
//TODO自动生成的方法存根
}
@覆盖
成功时公共无效(文件arg0) {
//TODO自动生成的方法存根
if(progressDialog!=空进度对话框。正在显示()){
进度对话框。dissolve();
}
意向意向=新意向(意向. ACTION _ VIEW);
intent.setFlags(Intent .标志_活动_新_任务);
意图。设置dataandtype(uri。从文件(新文件(环境。getExternalStorageDirectory(),' demo.apk '),
应用程序/vnd。安卓。package-archive’);
开始活动(意图);
}
@覆盖
public void onLoading(long arg0,long arg1,boolean arg2) {
//TODO自动生成的方法存根
进度对话框。设置max((int)arg 0);
进度对话框。设置进度((int)arg 1);
}
@覆盖
公共void onStarted() {
//TODO自动生成的方法存根
System.out.println('开始下载');
进度对话框=新进度对话框(loginactivity。这个);
进度对话框。setprogressstyle(进度对话框.风格_横);//设置为水平进行条
progressDialog.setMessage('正在下载中.');
进度对话框。设置进度(0);
进度对话框。show();
}
@覆盖
公共void onWaiting() {
//TODO自动生成的方法存根
}
});
}
私有void proDialogShow(上下文上下文,字符串消息){
pDialog=新进度对话框(上下文);
pdialog。设置消息(msg);
//pdialog . setcancelable(false);
p dialog . show();
}
私有void PDialogHide() {
尝试{
if (pDialog!=null pDialog.isShowing()) {
pdialog . dissolve();
}
} catch(异常e) {
e . printstacktrace();
}
}
}
以上是边肖推出的xutils3.0对下载项目的更新。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。