框架需要添加的权限
<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<T>)方法,发送请求,并返回HttpHandler对象
第一个参数:HttpMethod(GET,POST),第二个参数: http的网络请求接口,第三个参数:请求回调ResponseCallback,需要指定返回数据的泛型,一般为String
c、RequestCallback<T> 回调接口的抽象类
必须实现
onSuccess(ResponseInfo<T> 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<File>)RequestCallback<File>接口类同上
第一个参数url:网络资源地址
第二个参数target: 本地存储位置,如/mnt/sdcard/aa.mp3
第三个参数autoResume:是否继续下载(断点续传)
第四个参数autoRename:从请求返回信息中获取文件名,下载完成后是否重命名
第五个参数:异步请求的回调接口
c、HttpHandler类
通过HttpHandler.cancel()方法可以取消本次下载
(3)表单数据/文件上传的步骤方法
使用场景:上传基本数据或图片等文件
a、实例化HttpUtils->new HttpUtils()
params.addHeader("name", "value") 增加请求头参数
params.addQueryStringParameter("name", "value") 增加查询字符参数
params.addBodyParameter("name", "value") 增加只包含字符串参数
// 只包含字符串参数时默认使用BodyParamsEntity,
// 类似于UrlEncodedFormEntity("application/x-www-form-urlencoded")。
// 类似于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<File>)方法开始上传
第一个参数:请求方法,在此使用HttpMethod.POST
第二个参数:上传请求的网络路径
第三个参数:上传的数据,包含基本信息和上传文件信息
第四个参数:请求的回调接口
BitmapUtils的模块
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象,
支持加载网络图片和本地图片,内存管理使用lru算法,更好的管理bitmap内存,
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
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配置
配置缓存 路径:/data/data/{package}/cache/xx
bUtils.configMemoryCacheEnabled(true)
bUtils.configDefaultCacheExpiry(100*1024); //配置最大的内存缓存100k
加载显示动画 bUtils.configDefaultImageLoadAnimation(Animation)
BitmapDisplayConfig配置
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<T> entityType, Object idValue)
T findFirst(Selector selector)
List<T> findAll(Selector selector)
List<T> findAll(Class<T> entityType)
DbModel findDbModelFirst(SqlInfo sqlInfo)
DbModel findDbModelFirst(DbModelSelector selector) 链式查询,DbModel是继承HashMap类的
List<DbModel> list = dUtils.findDbModelAll(Selector.from(
Student.class).select("id", "name", "age")
List<DbModel> findDbModelAll(SqlInfo sqlInfo)
findDbModelAll(DbModelSelector selector)
g、统计
long count(Selector selector)
long count(Class<?> entityType)