xUtils类库的使用
2015-10-10 20:26
316 查看
[b]序言:[/b]
作为一个职业的程序猿,不会像新手一样把每一个需要实现的功能每次重写一遍,因为程序猿能熟练的使用各种第三方类库。
毕竟人类因为会使用工具才站到了食物链顶端。
现在就让我们学习使用xUtils类库 中的四个工具类
开源代码来自于:https://github.com/wyouflf/xUtils
-------------------------------------------------------------------------------------------------------------------
xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
xUitls 最低兼容android 2.2 (api level 8)
xUtils权限:
1、联网权限
2、外部存储写入权限
--------------------------------------------------------------------------------------------------------------------
[b]一、BitmapUtils 图像工具类[/b]
功能:
加载图片
加载网络图片时
BitmapUtils默认配置设置
以上的使用可以看出每当我们要加载一个图片的时候,都需要设置该图片的一些配置
而xUtils给我们提供了默认设置,即只要设置属性一次即可
使用方法为:使用BitmapUtils 的 configDefaultXxxx()格式的方法
eg. 设置默认配置,加载三个网络图片,则该三个图片的属性是一样的
--------------------------------------------------------------------------------------------------------------------
[b]二、ViewUtils视图相关工具类[/b]
功能:
android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event
1、注解
(1)关于注解:
代码中以@开头的内容就是注解
注解的类型:源代码注解、编译时注解、运行时注解
注解应用的方式:类、方法、成员变量、参数
注解的使用:注解的引用、注解的参数、注解的声明
(2)常见注解:
@Override
代表方法是重写了父类的方法
@Deprecated
代表修饰的内容已经过时了
@SuppressWarnings
代表忽略特定的代码检查
(3)注解类型
源代码级别的注解:存在于源代码中,但不会进行编译操作,也就是不会出现在类文件中
类文件级别(编译时)的注解:存在于类文件中,但不会被JVM加载
运行级别的注解:JVM运行时,会加载到JVM中
(4)注解的创建
1、创建.java的文件;选择Annotation。
2、创建出的注解代码以@interface作为标示,就像class一样。
3、指定注解能够应用在哪些范围上,例如:类、方法、成员变量、参数当中的哪些部分。
给注解指定@Target注解。
(5)注解的属性和参数
1.注解中指定的属性和参数,是需要在源代码开发的时候指定的,永远不会变。
2.因为代码中的注解,在编译之后,固化在class文件里了。
3.通过反射,可以获取成员变量的注解信息,以及获取注解的参数。
2、ViewUtils的使用
(1)ViewUtils.inject();
语句的注入
用途:用于加载当前类中所有相关的注解
(2)xUtils视图注解的应用
注解描述信息,ViewUtils.inject()动态加载、分析注解
1、描述:setContentView @ContentView(R.layout.xxx)
2、描述:findViewById @ViewInject(R.id.xxx)
3、描述事件监听器:@OnClick(R.id.xxx) .....
4、描述各种资源:@ResInject(id=R.xx.xx,type=ResTypes.XXX)
eg:
--------------------------------------------------------------------------------------------------------------------
[b]三、DbUtils 数据库相关工具类[/b]
功能:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
使用步骤:
1、编写实体类
bean实体类
数据库实体定义
利用@Table定义数据库实体对应的表
利用@Id标识主键
利用@Column标记数据库表的列字段
利用@Finder查找多个实体关系
2、DbUtils的创建
参数一:上下文 参数二:数据文件名
3、添加记录
--------------------------------------------------------------------------------------------------------------------
[b]四、HttpUtils 网络相关工具类[/b]
功能:
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
1、Get异步请求数 HttpUtils httpUtils = new HttpUtils(5000,"xxx[Android]");
//第一个参数,连接超时时间 ,第二个参数 userAgent 客户端标识,可以随便写
2、Get 同步请求数据
3、Post 上传
4、下载
HttpUtils的特点:
1.支持文件上传,Volley不支持;
2.支持文件下载,上传下载,支持进度,Volley不支持;
3.使用HttpClient,在Android5.0已经不在内置HttpCleint,使用Gradle开发,针对Android5.0之后,就需要添加一个过时包才可以继续使用;
4.使用异步任务,速度比Volley要慢。
-------------------------------------------------------------------------------------------------------------------
有任何建议或者使用中遇到问题都可以给我发邮件, 你也可以加入QQ群:330445659(已满), 275967695, 257323060,技术交流,idea分享 _
作为一个职业的程序猿,不会像新手一样把每一个需要实现的功能每次重写一遍,因为程序猿能熟练的使用各种第三方类库。
毕竟人类因为会使用工具才站到了食物链顶端。
现在就让我们学习使用xUtils类库 中的四个工具类
开源代码来自于:https://github.com/wyouflf/xUtils
-------------------------------------------------------------------------------------------------------------------
[b]xUtils简介[/b]
xUtils 包含了很多实用的android工具。xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
xUitls 最低兼容android 2.2 (api level 8)
xUtils权限:
1、联网权限
2、外部存储写入权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
--------------------------------------------------------------------------------------------------------------------
[b]一、BitmapUtils 图像工具类[/b]
功能:
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象; 支持加载网络图片和本地图片; 内存管理使用lru算法,更好的管理bitmap内存; 可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
加载图片
BitmapUtils bitmapUtils = new BitmapUtils(this); // 加载网络图片 第一个参数:如果是ImageView控件,则显示图片,否则显示为背景,第二个参数图片网络地址 bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png"); // 加载本地图片(路径以/开头, 绝对路径) bitmapUtils.display(testImageView, "/sdcard/test.jpg"); // 加载assets中的图片(路径以assets开头) bitmapUtils.display(testImageView, "assets/img/wallpaper.jpg");
加载网络图片时
bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png"); 对应display()方法 还有一个三个参数的方法 前两个参数不变,第三个参数为BitmapDisplayConfig对象,用于设置图片的配置 eg:
BitmapDisplayConfig displayConfig = new BitmapDisplayConfig(); displayConfig.setLoadFailedDrawable(Drawable) 设置加载失败的图片 displayConfig.setLoadingDrawable(Drawable) 设置加载中的图片 displayConfig.setAutoRotation(boolean) 有些JPEG图片,图片自身需要旋转才可以正常显示的情况, 来进行设置是否自动支持旋转 displayConfig.setAnimation(Animation) 用于实现要加载的View的显示动画,可用于ListView中
BitmapDisplayConfig displayConfig = new BitmapDisplayConfig(); //设置加载中的图片 Resources resources = getResources(); displayConfig.setLoadingDrawable(resources.getDrawable(R.drawable.ic_launcher)); //设置加载失败的图片 displayConfig.setLoadFailedDrawable(resources.getDrawable(android.R.drawable.ic_delete)); //设置Bitmap像素的配置 displayConfig.setBitmapConfig(Bitmap.Config.ARGB_8888); //设置内存中Bitmap最大的像素尺寸,减少内存占用 BitmapSize size = new BitmapSize(100,50); displayConfig.setBitmapMaxSize(size); //设置图片加载成功之后 到最终图片显示完成之间的动画效果 displayConfig.setAnimation(animation); bitmapUtils.display(imageView, url,displayConfig);
BitmapUtils默认配置设置
以上的使用可以看出每当我们要加载一个图片的时候,都需要设置该图片的一些配置
而xUtils给我们提供了默认设置,即只要设置属性一次即可
使用方法为:使用BitmapUtils 的 configDefaultXxxx()格式的方法
eg. 设置默认配置,加载三个网络图片,则该三个图片的属性是一样的
BitmapUtils bitmapUtils = new BitmapUtils(this); //设置默认的加载中的图片 bitmapUtils.configDefaultLoadingImage(R.drawable.ic_launcher); //设置默认的加载失败的图片 bitmapUtils.configDefaultLoadFailedImage(android.R.drawable.ic_delete); //设置默认的图片尺寸 bitmapUtils.configDefaultBitmapMaxSize(new BitmapSize(100,50)); //设置默认的加载超时时间 bitmapUtils.configDefaultConnectTimeout(2000); //加载第一张图片 bitmapUtils.display(imageView1, url_1); //加载第二张图片 bitmapUtils.display(imageView2, url_2); //加载第三张图片 bitmapUtils.display(imageView3, url_3);
--------------------------------------------------------------------------------------------------------------------
[b]二、ViewUtils视图相关工具类[/b]
功能:
android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event
1、注解
(1)关于注解:
代码中以@开头的内容就是注解
注解的类型:源代码注解、编译时注解、运行时注解
注解应用的方式:类、方法、成员变量、参数
注解的使用:注解的引用、注解的参数、注解的声明
(2)常见注解:
@Override
代表方法是重写了父类的方法
@Deprecated
代表修饰的内容已经过时了
@SuppressWarnings
代表忽略特定的代码检查
(3)注解类型
源代码级别的注解:存在于源代码中,但不会进行编译操作,也就是不会出现在类文件中
类文件级别(编译时)的注解:存在于类文件中,但不会被JVM加载
运行级别的注解:JVM运行时,会加载到JVM中
(4)注解的创建
1、创建.java的文件;选择Annotation。
2、创建出的注解代码以@interface作为标示,就像class一样。
3、指定注解能够应用在哪些范围上,例如:类、方法、成员变量、参数当中的哪些部分。
给注解指定@Target注解。
(5)注解的属性和参数
1.注解中指定的属性和参数,是需要在源代码开发的时候指定的,永远不会变。
2.因为代码中的注解,在编译之后,固化在class文件里了。
3.通过反射,可以获取成员变量的注解信息,以及获取注解的参数。
2、ViewUtils的使用
(1)ViewUtils.inject();
语句的注入
用途:用于加载当前类中所有相关的注解
//在Activity中注入: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ViewUtils.inject(this); //注入view和事件 ... textView.setText("some text..."); ... } //在Fragment中注入: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.bitmap_fragment, container, false); // 加载fragment布局 ViewUtils.inject(this, view); //注入view和事件 ... } //在PreferenceFragment中注入: public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ViewUtils.inject(this, getPreferenceScreen()); //注入view和事件 ... }
(2)xUtils视图注解的应用
注解描述信息,ViewUtils.inject()动态加载、分析注解
1、描述:setContentView @ContentView(R.layout.xxx)
2、描述:findViewById @ViewInject(R.id.xxx)
3、描述事件监听器:@OnClick(R.id.xxx) .....
4、描述各种资源:@ResInject(id=R.xx.xx,type=ResTypes.XXX)
eg:
// xUtils的view注解要求必须提供id,以使代码混淆不受影响。 @ViewInject(R.id.textView) TextView textView;
@ResInject(id = R.string.label, type = ResType.String) private String label;
// 取消了之前使用方法名绑定事件的方式,使用id绑定不受混淆影响 // 支持绑定多个id @OnClick({R.id.id1, R.id.id2, R.id.id3}) // or @OnClick(value={R.id.id1, R.id.id2, R.id.id3}, parentId={R.id.pid1, R.id.pid2, R.id.pid3}) // 更多事件支持参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。 @OnClick(R.id.test_button) public void testButtonClick(View v) { // 方法签名必须和接口中的要求一致 ... }
--------------------------------------------------------------------------------------------------------------------
[b]三、DbUtils 数据库相关工具类[/b]
功能:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
使用步骤:
1、编写实体类
package com.xqxapp.finance.bean; import android.graphics.Bitmap; import com.lidroid.xutils.db.annotation.Column; import com.lidroid.xutils.db.annotation.Id; import com.lidroid.xutils.db.annotation.Table; /** * Created * Author: xqx * Date: 15-10-9 */ @Table(name = "account") public class Account { @Id private long _id; @Column private int money_type; //类型:支出/收入 @Column private float money; //金额 @Column private String type; //支出用途/收入来源 @Column private String way; //金额类型:现金 支付宝。。。 @Column private String remarks; //备注 @Column private String time; //时间 @Column private String people; //群体 private Bitmap image; //存单 public long getId() { return _id; } public void setId(long id) { this._id = id; } public int getMoney_type() { return money_type; } public void setMoney_type(int money_type) { this.money_type = money_type; } public float getMoney() { return money; } public void setMoney(float money) { this.money = money; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getWay() { return way; } public void setWay(String way) { this.way = way; } public String getRemarks() { return remarks; } public void setRemarks(String remarks) { this.remarks = remarks; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public String getPeople() { return people; } public void setPeople(String people) { this.people = people; } public Bitmap getImage() { return image; } public void setImage(Bitmap image) { this.image = image; } }
bean实体类
数据库实体定义
利用@Table定义数据库实体对应的表
利用@Id标识主键
利用@Column标记数据库表的列字段
利用@Finder查找多个实体关系
2、DbUtils的创建
DbUtils.create(this,app.db);
参数一:上下文 参数二:数据文件名
3、添加记录
Account account = new Account(); account.setMoney(Float.parseFloat(et_money.getText().toString())); account.setMoney_type(MONEY_TYPE); account.setPeople(""); account.setRemarks(""); account.setTime(time.getText().toString()); account.setType(""); account.setWay(way.getText().toString()); DbUtils.save(account)
--------------------------------------------------------------------------------------------------------------------
[b]四、HttpUtils 网络相关工具类[/b]
功能:
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
1、Get异步请求数 HttpUtils httpUtils = new HttpUtils(5000,"xxx[Android]");
//第一个参数,连接超时时间 ,第二个参数 userAgent 客户端标识,可以随便写
//2、联网 httpUtils.send(HttpRequest.HttpMethod.GET, "http://www.baidu.com", new RequestCallBack<String>() { //请求成功时回调 @Override public void onSuccess(ResponseInfo<String> responseInfo) { // 请求数据成功后的操作 } //请求失败时回调 @Override public void onFailure(HttpException e, String s) { //请求数据失败后的操作 } });
2、Get 同步请求数据
try { ResponseStream responseStream = httpUtils.sendSync(HttpRequest.HttpMethod.GET, "http://www.163.com" ); int statusCode = responseStream.getStatusCode(); if(statusCode==200){ //进行数据的操作 } } responseStream.close(); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
3、Post 上传
HttpUtils httpUtils = new HttpUtils(5000); //POST请求的参数准备 //按参数提交数据 //参数的提交需要指定编码:也就是new RequestParams("字符编码"); //服务器 需要什么编码,客户端就要设置对应的编码 // 指定字符编码 RequestParams params = new RequestParams("UTF-8"); //1、设置参数 POST 内容 //在网址之后自动加入http://11.1.163.24:8080/post?a=123 params.addQueryStringParameter("a","123"); //POST 请求大部分都需要BodyParameter params.addBodyParameter("name","admin"); params.addBodyParameter("password", "123456"); //1.1 如果需要附加http头字段 , params.addHeader("User-Agent","Zhang Sir"); httpUtils.send( HttpRequest.HttpMethod.POST, //post方式 "http://11.1.163.24:8080/post", //网址接口 params, new RequestCallBack<String>() { @Override public void onSuccess(ResponseInfo<String> responseInfo) { txtInfo.setText(responseInfo.result); } @Override public void onFailure(HttpException e, String s) { txtInfo.setText("请求失败"); } } );
4、下载
HttpUtils httpUtils = new HttpUtils(5000); //1、下载文件 //获取存储卡路径 String state = Environment.getExternalStorageState(); //判断是否挂载成功 if(Environment.MEDIA_MOUNTED.equals(state)) { File root = Environment.getExternalStorageDirectory(); //目标文件对象 File targetFile = new File(root,"xmly1.apk"); //进行文件的下载 HttpHandler<File> download = httpUtils.download("http://11.1.163.24:8080/ximalayatingshu_64.apk", targetFile.getAbsolutePath(), //保存路径 true, //autoResume 是否断点续传,false 则可以重命名下载,true 则下载成功的不再下载,执行下载失败接口回调 true, //autoRename 自动重命名 new RequestCallBack<File>() { //回调 @Override public void onSuccess(ResponseInfo<File> responseInfo) { //返回下载成功的File对象 Toast.makeText(getApplicationContext(), "success", Toast.LENGTH_SHORT).show(); } @Override public void onFailure(HttpException e, String s) { Toast.makeText(getApplicationContext(), "failure", Toast.LENGTH_SHORT).show(); } /** * 当前网络请求:上传下载的进度的更新回调 * @param total 总长度 * @param current 当前进度 * @param isUploading 是否上传 true上传 false 下载 */ @Override public void onLoading(long total, long current, boolean isUploading) { super.onLoading(total, current, isUploading); //TODO 更新进度条 } } ); }
HttpUtils的特点:
1.支持文件上传,Volley不支持;
2.支持文件下载,上传下载,支持进度,Volley不支持;
3.使用HttpClient,在Android5.0已经不在内置HttpCleint,使用Gradle开发,针对Android5.0之后,就需要添加一个过时包才可以继续使用;
4.使用异步任务,速度比Volley要慢。
-------------------------------------------------------------------------------------------------------------------
关于开源代码作者
Email: wyouflf@qq.com, wyouflf@gmail.com有任何建议或者使用中遇到问题都可以给我发邮件, 你也可以加入QQ群:330445659(已满), 275967695, 257323060,技术交流,idea分享 _
相关文章推荐