当前位置: 移动技术网 > IT编程>移动开发>Android > 用xutils3.0进行下载项目更新

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

盛泉,湖州天气预报,nba总决赛第7场直播

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网