XUtils框架基本使用

框架需要添加的权限

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

XUtils框架的四大模块

ViewUtils的模块

(1)查找UI控件:@ViewInject(R.id.textView)

eg:        @ViewInject(R.id.tv1Id)        private TextView tv1;

(2)注册UI控件的事件: @OnClick(R.id.test_button)

eg:        @OnClick(R.id.btn1Id)     public void aa(View v){}

说明:

1)   方法的访问范围一般为public ,但如果为private也会正常执行,因为通过反射机制获取的方法是所有方法。

2)   方法无返回类型

3)   方法的参数必须是View类型的。

(3)注册ListView控件的事件:@OnItemClick(R.id.listViewId)

(4)注册CheckBox控件的事件:@OnCompoundButtonCheckedChange(R.id.enableDiscovereId)

(5)查找资源:@ResInject(id = R.string.label, type = ResType.String)

(6)解析UI注解:ViewUtils.inject(this)

(一)在Activity中注入

------------------

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ViewUtils.inject(this); //注入view和事件

...

}

(二)在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和事件

...

}

(三)在BaseAdapter中注入

------------------

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder vHolder=null;

if(convertView==null){

convertView=LayoutInflater.from(context).inflate(R.layout.item_jx, null);

vHolder=new ViewHolder();

ViewUtils.inject(vHolder, convertView);

...

}

...

}

(四)在PreferenceFragment中注入

------------------

public void onActivityCreated(Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

ViewUtils.inject(this, getPreferenceScreen()); //注入view和事件

...

}

ViewUtils.inject()的重载方法

// inject(View view);

// inject(Activity activity)

// inject(PreferenceActivity preferenceActivity)

// inject(Object handler, View view)

// inject(Object handler, Activity activity)

// inject(Object handler, PreferenceGroup preferenceGroup)

// inject(Object handler, PreferenceActivity preferenceActivity)

HttpUtils的模块

支持同步和异步方式的网络请求,支持大文件上传,上传大文件不会oom,支持GET、POST、PUT、MOVE、COPY、DELETE、HEAD、OPTIONS、TRACE、CONNECT请求。

(1)一般使用步骤方法

使用场景: 获取Json/xml的网络接口数据

a、实例化HttpUtils->new HttpUtils()

b、调用实例的send(HttpMethod,String url,RequestCallback)方法,发送请求,并返回HttpHandler对象

第一个参数:HttpMethod(GET,POST),第二个参数: http的网络请求接口,第三个参数:请求回调ResponseCallback,需要指定返回数据的泛型,一般为String

c、RequestCallback 回调接口的抽象类

必须实现

onSuccess(ResponseInfo responseInfo)请求成功的回调方法

onFailure(HttpException error, String msg)请求失败的回调方法

不必须实现

onStart() 开始执行之前的回调方法

onLoading(long total, long current, boolean isUploading) 正在执行的回调方法

onCancelled()  取消请求的回调方法

d、HttpHandler类

cancel(); 取消请求

cancel(true) 取消请求时,是否中断线程

(2)文件下载的步骤方法

使用场景:下载非图片的网络位置的文件  , 特点:支持断点续传,随时停止下载任务,开始任务

a、实例化HttpUtils->new HttpUtils()

b、调用实例的download(String url,String target,boolean autoResume,boolean autoRename,RequestCallback)RequestCallback接口类同上

第一个参数url:网络资源地址

第二个参数target: 本地存储位置,如/mnt/sdcard/aa.mp3

第三个参数autoResume:是否继续下载(断点续传)

第四个参数autoRename:从请求返回信息中获取文件名,下载完成后是否重命名

第五个参数:异步请求的回调接口

c、HttpHandler类

通过HttpHandler.cancel()方法可以取消本次下载

(3)表单数据/文件上传的步骤方法

使用场景:上传基本数据或图片等文件

a、实例化HttpUtils->new HttpUtils()

b、实例化RequestParamsRequestParams params=new RequestParams()

params.addHeader("name", "value") 增加请求头参数

params.addQueryStringParameter("name", "value") 增加查询字符参数

params.addBodyParameter("name", "value") 增加只包含字符串参数

// 只包含字符串参数时默认使用BodyParamsEntity,

// 类似于UrlEncodedFormEntity("application/x-www-form-urlencoded")。

params.addBodyParameter("file", new File("path")) 增加文件参数

// 加入文件参数后默认使用MultipartEntity("multipart/form-data"),

// 如需"multipart/related",xUtils中提供的MultipartEntity支持设置subType为"related"。

// 使用params.setBodyEntity(httpEntity)可设置更多类型的HttpEntity(如:

// MultipartEntity,BodyParamsEntity,FileUploadEntity,InputStreamUploadEntity,StringEntity)。

// 例如发送json参数:params.setBodyEntity(new StringEntity(jsonStr,charset));

c、调用HttpUtils实例的send(HttpMethod,String url,RequestParams params,RequestCallback)方法开始上传

第一个参数:请求方法,在此使用HttpMethod.POST

第二个参数:上传请求的网络路径

第三个参数:上传的数据,包含基本信息和上传文件信息

第四个参数:请求的回调接口

BitmapUtils的模块

加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象,

支持加载网络图片和本地图片,内存管理使用lru算法,更好的管理bitmap内存,

可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...

a、实例化BitmapUtils

BitmapUtils bUtils=new BitmapUtils(getApplicationContext(),"/mnt/sdcard/");

第一个参数:Context 应用上下文对象         第二个参数: 扩展缓存路径

bUtils.configThreadPoolSize(5); //配置线程池大小

bUtils.configDiskCacheEnabled(true); //启用扩展存储缓存

加载网络图片:bUtils.display(imageView, "http://www.baidu.com/logo.png")

加载本地图片:bitmapUtils.display(imageView, "/sdcard/a.jpg")

加载assets中的图片:加载本地图片:bitmapUtils.display(imageView, "assets/a.jpg")

在使用ListView显 示图片时,可以通过PauseOnScrollListener控制滑动和快速滑动过程中时暂停加载图片

//仅处理与图片相关的事件,第二个参数:滚动时是否暂停,第三个参数:快速滑动时是否暂停

listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));

//同时处理ListView.OnScrollListener事件

listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener));

b、了解config打头的方法

BitmapGlobalConfig配置

线程加载线程数量     bUtils.configThreadPoolSize(5); //配置线程池大小

配置缓存     路径:/data/data/{package}/cache/xx

bUtils.configMemoryCacheEnabled(true)

bUtils.configDefaultCacheExpiry(100*1024); //配置最大的内存缓存100k

加载显示动画       bUtils.configDefaultImageLoadAnimation(Animation)

BitmapDisplayConfig配置

图片宽高      bUtils.configDefaultBitmapMaxSize(int w,int h)

bUtils.configDefaultBitmapMaxSize(BitmapSize bs)

new BitmapSize(int w,int h) 指定宽和高

BitmapCommonUtils.getScreenSize(context) 依据屏幕尺寸

默认显示图片       bUtils.configDefaultLoadingImage(int resId)

bUtils.configDefaultLoadingImage(Bitmap b)

bUtils.configDefaultLoadingImage(Drawable d)

下载失败图片        bUtils.configDefaultLoadFailedImage(int resId)

bUtils.configDefaultLoadFailedImage(Bitmap b)

bUtils.configDefaultLoadFailedImage(Drawable d)

图片保存质量        bUtils.configDefaultBitmapConfig(Bitmap.Config.RGB_565);

图片加载动画        bUtils.configDefaultImageLoadAnimation(Animation)

eg:

//实例化图片显示的配置

BitmapDisplayConfig bdConfig=new BitmapDisplayConfig();

//设置显示图片特性

bdConfig.setBitmapConfig(Bitmap.Config.ARGB_4444);

bdConfig.setBitmapMaxSize(BitmapCommonUtils.getScreenSize(context)); //图片的最大尺寸

bdConfig.setLoadingDrawable(context.getResources().getDrawable(R.drawable.ic_default)); //加载时显示的图片

bdConfig.setLoadFailedDrawable(context.getResources().getDrawable(R.drawable.ic_default)); //加载失败时显示的图片

bdConfig.setAutoRotation(true); //自动旋转

bdConfig.setShowOriginal(false); //不显示源图片

bdConfig.setAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_top)); //显示图片执行的动画

bUtils.configDefaultDisplayConfig(bdConfig); //将显示图片的配置设置到图片工具类中

DBUtils的模块

模块说明:android中的orm框架(Object Relation Mapping),一行代码就可以进行增删改查,支持事务,默认关闭

可通过注解自定义表名、列名、外键、唯一性约束、NOT NULL约束、CHECK约束等(需要混淆的时候请注解表名

和列名),支持绑定外键,保存实体时外键关联实体自动保存或更新,自动加载外键关联实体,支持延时加载,

支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子

a、实体类声明及注解

注:必须提供无参的构造方法注:必须提供无参的构造方法

@Table(name="t_class") 作用于类,修改的类与表建立ORM

@Id(column="_id") 作用于类中id成员属性,代表:主键

@Column(column="name") 作用于类中成员,代表:属性对应的列名

@NotNull 作用于类中成员,代表:不为空约束

@Unique 作用于类中成员,代表:唯一约束

@Check(value="numbers>20") 作用于类中成员,代表:检查约束,即numbers列值必须在于20

@Foreign(column="parentId",foreign="id") 作用于类中成员,代表:外键约束,column为属性对应的列

名,foreign为外表的主键

@Finder(valueColumn="id",targetColumn="cid") 作用于类成员,探测当前表与其它表之间的关联

b、DBUtils实例化->dUtils

create(Context context)

create(Context context, String dbName)

create(Context context, String dbDir, String dbName)

create(Context context, String dbName, int dbVersion, DbUpgradeListener)

create(Context context, String dbDir, String dbName, int dbVersion, DbUpgradeListener )

c、通过DaoConfig配置App全局数据库信息

dUtils.getDaoConfig().setDbDir(String dir)

dUtils.getDaoConfig().setDbName(String dbName)

dUtils.getDaoConfig().setDbVersion(int dbVersion)

d、事务与调试

dUtils.configAllowTransaction(true)

dUtils.configDebug(true);

e、增、删、修改数据

save(Object entity) 保存单条记录

saveAll(List entities) 批量保存

saveBindingId(Object entity) 关联的对象自动保存       目前测试结果: 不保存

saveBindingIdAll(List entities) 批量保存,同时保存关系对象        目前测试结果: 不保存

deleteById(Class entityType, Object idValue)

delete(Object entity)

delete(Class entityType, WhereBuilder whereBuilder)

deleteAll(List entities)

deleteAll(Class entityType)

update(Object entity, String... updateColumnNames)

update(Object entity, WhereBuilder whereBuilder, String... updateColumnNames)

updateAll(List entities, String... updateColumnNames)

updateAll(List entities, WhereBuilder whereBuilder, String... updateColumnNames)

f、查询数据

T findById(Class entityType, Object idValue)

T findFirst(Selector selector)

List findAll(Selector selector)

List findAll(Class entityType)

DbModel findDbModelFirst(SqlInfo sqlInfo)

DbModel findDbModelFirst(DbModelSelector selector)链式查询,DbModel是继承HashMap类的

List list = dUtils.findDbModelAll(Selector.from(

Student.class).select("id", "name", "age")

List findDbModelAll(SqlInfo sqlInfo)

findDbModelAll(DbModelSelector selector)

g、统计

long count(Selector selector)

long count(Class entityType)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,400评论 25 707
  • 一个有条理性的聚焦的人,与一个发散思维的社交型人,如何电话沟通? 一方漫无目的意气风发的说个不停,另一方心焦气躁却...
    心理彦究员阅读 277评论 0 0
  • 浅昱阅读 145评论 0 0