Days38xUtils
来源:互联网 发布:淘宝店怎么免费推广 编辑:程序博客网 时间:2024/06/18 05:17
xUtils框架
参考自:http://www.android100.org/html/201606/19/243677.html
xUtils 是一个工具类的集合体,其中包含许多实用的Android工具,主要包含四大模块:
1、ViewUtils的模块
2、HttpUtils的模块
3、BitmapUtils的模块
4、DBUtils的模块
现在有两个版本:2.6.14版本和3.3.36版本,使用上会有差别;
(一)ViewUtils模块
三种用途:1、控件注解 2、资源注解 3、控件的回调方法的注解
注意:所有用到的IOC成员变量,使用的时候
在activity中必须写在x.view().inject(this)(低版本的注入导包时要注意,v7包下也有ViewUtils,不要导错,ViewUtils.inject(this);)之后
在fragment中需要在加载视图view之后,(低版本)ViewUtils.inject(this, view)
相当于给activity了使用xUtils的权限,不然程序会崩溃()
a、控件的注解
// 1、 控件的注解,进行UI绑定,无需findViewById() @ViewInject(R.id.txtShow) private TextView txtShow;
b、资源注解(低版本可用)(要有type指明是什么资源)
// 2、资源的注解(eg:字符串)// @ResInject (id = R.string.app_name , type = ResType.String)// private String hehe;
c、控件的回调方法的注解
被注解的方法的要求:
1、必须以private修饰
2、返回值类型
当方法的返回值类型为void的时,返回值类型为任意(意思是给我了我并不用)
当方法的返回值类型不是void时,返回值类型必须是被注解的方法的返回值类型(意思是我要的必须给我)
3、参数签名和type的接口要求的参数签名一致(参数签名指:个数、类型、顺序),否则会报非法的参数异常
备注:
1、value为控件的id集合;注解参数支持数组:value={id1,id2}
2、type为事件类型,默认为点击事件;
3、如果type的接口类型提供多个方法,则需要使用method指定方法名
案例代码:
public class ViewInjectActivity extends AppCompatActivity {// 1、 控件的注解,进行UI绑定,无需findViewById() @ViewInject(R.id.txtShow) private TextView txtShow; @ViewInject(R.id.vpShow) private ViewPager vpShow;// 2、资源的注解(eg:字符串)// @ResInject (id = R.string.app_name , type = ResType.String)// private String hehe; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_inject); /** * ViewUtils的使用: * 1、控件注解 2、资源注解 3、控件的回调方法的注解 * 所有用到的IOC成员变量,使用的时候必须写在x.view().inject(this)之后,不然程序会崩溃 * */ x.view().inject(this); setData(); txtShow.setText("this is demo1"); } private void setData() { final List<ImageView> list = new ArrayList<>(); int[] resId = new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3}; for (int i = 0;i<resId.length;i++){ ImageView iv = new ImageView(this); iv.setImageResource(resId[i]); list.add(iv); } vpShow.setAdapter(new PagerAdapter() { @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view ==object; } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(list.get(position)); return list.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(list.get(position)); } }); } /** * 3、回调方法的注解 * 备注: * value为控件的id集合;注解参数支持数组:value={id1,id2} * type为事件类型,默认为点击事件; * 如果type的接口类型提供多个方法,则需要使用method指定方法名 * * * 被注解的方法的要求: * 1、必须以private修饰 * 2、返回值类型 * 当方法的返回值类型为void的时,返回值类型为任意(意思是给我了我并不用) * 当方法的返回值类型不是void时,返回值类型必须是被注解的方法的返回值类型(意思是我要的必须给我) * 3、参数签名和type的接口要求的参数签名一致(参数签名指:个数、类型、顺序),否则会报非法的参数异常 */// 你可以给我但我不用 @Event(R.id.btnShow) private boolean abc(View view){ txtShow.setText("click one"); return false; }// @Event(R.id.btnShow)// private void abc(View v){// txtShow.setText("click one ..");// }// 我要的必须给我 @Event(value = R.id.btnShow3,type = View.OnLongClickListener.class) private boolean efg(View view){ txtShow.setText("long click me"); return false; }// 当type中提供多个方法,用method指定方法名 @Event(value = R.id.vpShow,type = ViewPager.OnPageChangeListener.class,method = "onPageSelected") private void hij(int position){ txtShow.setText("this is "+(position+1)+" page"); }// @Event({R.id.btnShow,R.id.btnShow1})// private String abc(View v){// switch (v.getId()){// case R.id.btnShow:// txtShow.setText("click one one");// break;// case R.id.btnShow1:// txtShow.setText("click two two");// break;// }// return null;// }}
(二)HttpUtils模块
相比于使用OkHttp,可以简化代码,其实两行代码就可以实现从网络上获取资源
案例代码:
public class HttpUtilsActivity extends AppCompatActivity { private Callback.Cancelable mCancelable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_http_utils); } //注意:需要在application创建时初始化xUtils /** * xUtils初始化步骤: * 1、创建自己的application类,在onCreate方法中执行x.Ext.init(this);代码 * 2、别忘了在manifest文件里,application标签中添加name属性 * @param view */ public void get(View view) { String url = "http://api.fengniao.com//app_ipad/pic_bbs_list_v2.php?appImei=000000000000000&osType=Android&osVersion=4.1.1&fid=24&page=1"; RequestParams entity = new RequestParams(url);// CommonCallback相当于一直在监听请求的状态 mCancelable = x.http().get(entity, new Callback.CommonCallback<String>() {// 请求成功的回调方法 @Override public void onSuccess(String result) { Toast.makeText(HttpUtilsActivity.this,"result:"+result,Toast.LENGTH_LONG).show(); }// 请求失败的回调方法 @Override public void onError(Throwable ex, boolean isOnCallback) { Toast.makeText(HttpUtilsActivity.this, "请求失败的回调方法", Toast.LENGTH_SHORT).show(); }// 取消请求的回调方法 @Override public void onCancelled(CancelledException cex) { Toast.makeText(HttpUtilsActivity.this, "取消请求的回调方法", Toast.LENGTH_SHORT).show(); }// 请求完成的回调方法(不管请求成功与否,均会调用此方法) @Override public void onFinished() { Toast.makeText(HttpUtilsActivity.this, "请求完成的回调方法", Toast.LENGTH_SHORT).show(); } }); } public void post(View view) {// 与get方法的不同 /** * 1、需要在RequestParams params = new RequestParams(url);之后 * 增加代码: params.addBodyParameter("user","admin"); user对应表单中的标签名 ,admin对应服务器端保存的值 * params.addBodyParameter("pass","123456"); 如上 * 2、调用的是x.http().post(RequestParams params,CommonCallback<> callback); * */ }}
(三)BitmapUtils
1、加载Bitmap的时候无需考虑Bitmap加载过程中出现的OOM和Android容器快速滑动时候出现的图片错位等现象;
2、支持加载网络图片和本地图片;
3、内存管理使用LRU算法,更好的管理bitmap内存;
4、可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。
低版本的使用:
1、加载网络图片
BitmapUtils bitmapUtils = new BitmapUtils(this);
bitmapUtils.display(testImageView, “http://bbs.lidroid.com/static/image/common/logo.png“);
2、加载本地图片(路径以/开头, 绝对路径)
BitmapUtils bitmapUtils = new BitmapUtils(this);
bitmapUtils.display(testImageView, “/sdcard/test.jpg”);
3、加载assets中的图片(路径以assets开头)
BitmapUtils bitmapUtils = new BitmapUtils(this);
bitmapUtils.display(testImageView, “assets/img/wallpaper.jpg”);
4、使用ListView等容器展示图片时可通过PauseOnScrollListener控制滑动和快速滑动过程中时候暂停加载图片
BitmapUtils bitmapUtils = new BitmapUtils(this);
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener));
高版本的使用:
案例代码:
public class ImageActivity extends AppCompatActivity{ @ViewInject(R.id.iv) private ImageView iv;// 建造者类,可以添加对ImageView显示图片的设置 private ImageOptions options; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image); x.view().inject(this); options = new ImageOptions.Builder()// 设置图片的保存质量 .setConfig(Bitmap.Config.ARGB_8888)// 设置图片下载失败时显示的图片(当没有网络时会显示)(当地址错误会XX) .setFailureDrawableId(R.drawable.a3)// 设置正在加载的图片 .setLoadingDrawableId(R.drawable.a1)// 设置图片是否是圆形 ;注意:慎用,是对图片的处理,不是直接操作ImageView; .setCircular(true)// 设置图片是否渐入 .setFadeIn(true)// 设置是否使用缓存;注意:此处是3g缓存功能; .setUseMemCache(true)// 设置是否忽略gif图片 .setIgnoreGif(true)// .setIgnoreGif(false) .build(); } public void click(View view) {// String url = "http://ww1.sinaimg.cn/mw690/4b08ac5ejw1f8n24jqt3oj22yo4g0kjs.jpg"; String url = "http://qq.yh31.com/tp/zjbq/201512052121443594.gif";// 将要ImageView控件与图片的url和对控件显示图片的一些设置绑定在一起 x.image().bind(iv,url,options); }//*****************************************************************//注意:ImageView加载图片过程:最开始会从内存里加载图片,如果找到图片就会直接返回图片,如果没有就会从硬盘缓存里面去取图片,//如果硬盘缓存还没有就会从网络加载图片;从网络加载图片,会存一份在内存中,同时存一份在外存SDcard中;//********************************************************************}
- Days38xUtils
- 网络编程(23)—— socket客户端连接上服务端是在listen之后而非在accept之时
- 不同环境下的str.getBytes().length!=str.length()区别
- nutz基于shiro实现身份认证和权限认证
- poj 2761 线段树(多次查询不覆盖区间的第k小数)
- C++ if语句如何怎样退出?
- Days38xUtils
- bzoj 2599: [IOI2011]Race (点分治)
- Perl ping
- iOS Xcode自动扑捉到bug崩溃的地方
- 开源Faac实现PCM编码AAC
- SQLite数据库的使用
- setTimeout Null Undefined
- wordpress常用插件汇总
- iOS推送的总结