框架需要添加的权限
<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)