欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

用xutils3.0进行下载项目更新

程序员文章站 2024-03-06 20:19:56
xutils简介 xutils 包含了很多实用的android工具。 xutils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的orm,更...

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进行下载项目更新,希望对大家有所帮助