用xutils3.0进行下载项目更新
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; @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("提示网络错误"); } @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("当前版本为最新,不用跟新"); } else { // 不同,弹出更新提示对话框 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);//断点下载 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);//设置为水平进行条 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进行下载项目更新,希望对大家有所帮助
上一篇: Springmvc实现文件上传
下一篇: JavaMe开发自适应滚动显示
推荐阅读
-
用xutils3.0进行下载项目更新
-
用xutils3.0进行下载项目更新
-
用subversion和trac进行项目管理 项目管理subversionPythonSVN.net
-
用 Python 自动监测 GitHub 项目更新
-
PHP用header进行文件下载
-
U盘杀毒专家怎么用如何进行U盘杀毒(附u盘杀毒专家下载)
-
windows64位下用apache2.4.29部署django1.11.7项目并使在局域网内可访问(mod_wsgi.so可下载)--超详细
-
怎样在Xcode4中用Git对已有项目进行版本管理
-
怎样在Xcode4中用Git对已有项目进行版本管理
-
Qt项目中,用QPainter进行绘制图形时,边角显示不完整问题的梳理