zoukankan      html  css  js  c++  java
  • 深入学习xUtils 2015-06-14 10:50 23人阅读 评论(0) 收藏

    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中的例子。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    JS 、JQ 获取宽高总结 & JS中getBoundingClientRect的作用及兼容方案
    JS与JQ 获取页面元素值的方法和差异对比
    ES6
    移动端:active伪类无效的解决方法
    JavaScript中valueOf函数与toString方法
    Reverse Words in a String -- LeetCode
    Count Primes -- LeetCodes (primality test)
    Maximum Size Subarray Sum Equals k -- LeetCode
    Subsets II -- LeetCode
    Maximum Product of Word Lengths -- LeetCode
  • 原文地址:https://www.cnblogs.com/merbn/p/4638866.html
Copyright © 2011-2022 走看看