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进行下载项目更新,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
Scrapy提供了一个 item pipeline ,来下载属于某个特定项目的图片,比如,当你抓取产品时,也想把它们的图片下载到本地。 这条管道,被称作图片管道,在 ImagesPipeline 类中实现,提供了一个方便并具有额外特性的方法,来下载并本地存储图片: 将所有下载的图片转换成通用的格式(JPG)和模式(RGB) 避免重新下载最近已经下载过的图片 缩略图生成 检测图像的宽/高,确保它们满
问这个问题的另一种方法是: 如何使用Azure个人访问令牌验证项目,以便maven build可以下载发布在
本文向大家介绍SpringBoot使用POI进行Excel下载,包括了SpringBoot使用POI进行Excel下载的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了SpringBoot使用POI进行Excel下载的具体代码,供大家参考,具体内容如下 使用poi处理Excel特别方便,此处将处理Excel的代码分享出来。 1.maven引用 2.service逻辑代码 3.contr
大家好,请指导如何在Xcode中解决:WebdriverAgent项目的问题。 在WebDriverAgent内部使用命令:./scripts/bootstrap.sh-d后,按照要求遵循所有先决条件 cd/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/open。复制WebdriverAgent文件夹cd
问题内容: 在Gradle多项目设置中是否无法在主项目文件夹之外使用外部依赖项? 就像文件中一样 还是必须 始终 将相关项目包含在父项目文件夹中? 问题答案: 假设以下文件系统层次结构: 将以下内容添加到您的中: 和你内心里面的 根据需要重复尽可能多的项目。
问题内容: 我需要将项目的所有传递依赖项下载到命令行上的目录, 而没有 pom.xml文件或其他脚本。理想情况下,我将可以使用一个或两个命令来执行此操作。据我所知,这至少是mvn的两步过程。 将依赖项下载到本地存储库 将依赖项复制到lib目录 为了获得我运行的依赖 哪个很棒。不幸的是,目标参数对我没有帮助,因为它不会将所有可传递的依赖项放入目标中。 因此,现在我需要将该JAR文件及其所有传递依赖项