xUtils简介
xUtils 包含了很多实用的android工具。
xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
xUitls最低兼容android 2.2 (api level 8)
目前xUtils主要有四大模块:
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内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
DbUtils模块:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
XUtil使用方法:
使用xUtils快速开发框架需要有以下权限:
<uses-permissionandroid:name="android.permission.INTERNET" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
public class MainActivity extends Activity { @ViewInject(R.id.btn_get) private Button btn_get; @ViewInject(R.id.btn_post) private Button btn_post; @ViewInject(R.id.btn_bitmapUtils) private Button btn_bitmapUtils; @ViewInject(R.id.btn_sendsync) private Button btn_sendsync; private ImageView imgv; @ViewInject(R.id.lv) private ListView lv; private String url = "http://api.yi18.net/news/list?page=1&limit=10"; private String url1 = "http://api.yi18.net/news/list?"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewUtils.inject(this); } @OnClick(R.id.btn_get) public void btnget(View view) { HttpUtils httpUtils = new HttpUtils(); httpUtils.send(HttpMethod.GET, url, new RequestCallBack<String>() { @Override public void onFailure(HttpException arg0, String arg1) { // TODO Auto-generated method stub Log.e("", "错误信息===" + arg0.getMessage()); } @Override public void onSuccess(ResponseInfo<String> result) { // TODO Auto-generated method stub Log.e("", "请求到的信息" + result.result); try { // JSONObject obj1 = new JSONObject(result.result); // JSONArray jsonArray = obj1.getJSONArray("yi18"); // List<Info> infos = new ArrayList<Info>(); // for (int i = 0; i < jsonArray.length(); i++) { // Info info = new Info(); // JSONObject obj2 = jsonArray.getJSONObject(i); // String title = obj2.getString("title"); // info.setTitle(title); // if (obj2.has("img")) { // String img = obj2.getString("img"); // info.setImg(img); // } // infos.add(info); // lv.setAdapter(new InfoAdapter(getApplicationContext(), // infos)); // } getData(result); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } @OnClick(R.id.btn_post) public void btnpost(View view) { HttpUtils httpUtils = new HttpUtils(); RequestParams params = new RequestParams(); params.addBodyParameter("page", "1"); params.addBodyParameter("limit", "20"); httpUtils.send(HttpMethod.POST, url1, params, new RequestCallBack<String>() { @Override public void onFailure(HttpException arg0, String arg1) { // TODO Auto-generated method stub Log.e("===", arg1.toString()); } @Override public void onSuccess(ResponseInfo<String> arg0) { // TODO Auto-generated method stub Log.e("请求成功", arg0.result); try { getData(arg0); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } private void getData(ResponseInfo<String> arg0) throws JSONException { JSONObject obj1 = new JSONObject(arg0.result); JSONArray jsonArray = obj1.getJSONArray("yi18"); List<Info> infos = new ArrayList<Info>(); for (int i = 0; i < jsonArray.length(); i++) { Info info = new Info(); JSONObject obj2 = jsonArray.getJSONObject(i); String title = obj2.getString("title"); info.setTitle(title); if (obj2.has("img")) { String img = obj2.getString("img"); info.setImg(img); } infos.add(info); lv.setAdapter(new InfoAdapter(getApplicationContext(), infos)); } } @OnClick(R.id.btn_sendsync) public void btnsendsync(View view) { HttpUtils httpUtils =new HttpUtils(); try { ResponseStream sendSync = httpUtils.sendSync(HttpMethod.GET, url); Log.e("sync", "======================="+sendSync); } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @OnClick(R.id.btn_bitmapUtils) public void btnbmputils(View view) { imgv = (ImageView) findViewById(R.id.imgv); BitmapUtils bitmapUtils = new BitmapUtils(getApplicationContext()); bitmapUtils.configDefaultLoadingImage(R.drawable.ic_launcher); bitmapUtils .configDefaultLoadFailedImage(android.R.drawable.alert_light_frame); bitmapUtils.display(imgv, "http://avatar.csdn.net/1/9/0/3_merbn.jpg", new BitmapLoadCallBack<ImageView>() { @Override public void onLoadCompleted(ImageView arg0, String arg1, Bitmap arg2, BitmapDisplayConfig arg3, BitmapLoadFrom arg4) { // TODO Auto-generated method stub imgv.setImageBitmap(toRoundBitmap(arg2)); } @Override public void onLoadFailed(ImageView arg0, String arg1, Drawable arg2) { // TODO Auto-generated method stub } }); } public static Bitmap toRoundBitmap(Bitmap bitmap) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); float roundPx; float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom; if (width <= height) { roundPx = width / 2; top = 0; left = 0; bottom = width; right = width; height = width; dst_left = 0; dst_top = 0; dst_right = width; dst_bottom = width; } else { roundPx = height / 2; float clip = (width - height) / 2; left = clip; right = width - clip; top = 0; bottom = height; width = height; dst_left = 0; dst_top = 0; dst_right = height; dst_bottom = height; } Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom); final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom); final RectF rectF = new RectF(dst); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(Color.WHITE); paint.setStrokeWidth(4); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, src, dst, paint); // 画白色圆圈 paint.reset(); paint.setColor(Color.WHITE); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); paint.setAntiAlias(true); canvas.drawCircle(width / 2, width / 2, width / 2 - 5 / 2, paint); return output; }
public class MainActivity extends Activity { @ViewInject(R.id.btn_downImage) private Button btn_downImage; @ViewInject(R.id.btn_startanim) private Button btn_start; @ViewInject(R.id.btn_stopanim) private Button btn_stop; @ViewInject(R.id.btn_loadxmlanim) private Button btn_Load; @ViewInject(R.id.btn_downImageBack) private Button btn_loadBack; AnimationDrawable animationDrawable; @ViewInject(R.id.imageView1) private ImageView imgv; @ViewInject(R.id.imageView2) private ImageView imgv2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewUtils.inject(this); } // 加载xml文件动画 @OnClick(R.id.btn_loadxmlanim) public void btn_load(View view) { Animation a = AnimationUtils.loadAnimation(this, R.anim.alpha); imgv.startAnimation(a); } // 下载图片有回调 @OnClick(R.id.btn_downImageBack) public void btnLoadImageBack(View view) { final RotateAnimation animation = new RotateAnimation(0, 180, 200, 200); animation.setRepeatCount(5); animation.setDuration(5000); BitmapUtils bitmapUtils = new BitmapUtils(this); bitmapUtils.configDefaultImageLoadAnimation(animation); bitmapUtils.display(imgv, "http://avatar.csdn.net/1/9/0/3_merbn.jpg", new BitmapLoadCallBack<ImageView>() { @Override public void onLoadCompleted(ImageView arg0, String arg1, Bitmap arg2, BitmapDisplayConfig arg3, BitmapLoadFrom arg4) { // TODO Auto-generated method stub imgv.setImageBitmap(arg2); imgv.startAnimation(animation); } @Override public void onLoadFailed(ImageView arg0, String arg1, Drawable arg2) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "错误", 0).show(); } }); } // 停止动画 @OnClick(R.id.btn_stopanim) public void btnstop(View view) { if (animationDrawable != null) { animationDrawable.stop(); } } // 开启动画 @OnClick(R.id.btn_startanim) public void btnstart(View view) { if (animationDrawable != null) { animationDrawable = (AnimationDrawable) imgv2.getBackground(); animationDrawable.start(); } } // 下载图片 @OnClick(R.id.btn_downImage) public void btndownImage(View view) { BitmapUtils bitmapUtils = new BitmapUtils(this); AnimationSet animationSet = new AnimationSet(true); AlphaAnimation anim1 = new AlphaAnimation(0, 1); anim1.setDuration(5000); animationSet.addAnimation(anim1); bitmapUtils.configDefaultImageLoadAnimation(animationSet); bitmapUtils.display(imgv, "http://avatar.csdn.net/1/9/0/2_merbn.jpg"); }
目前xUtils主要有四大模块:
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内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
DbUtils模块:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
版权声明:本文为博主原创文章,未经博主允许不得转载。