zoukankan      html  css  js  c++  java
  • Android 开源框架 ( 五 ) xUtils --- Android 里的 ORM IOC聚合型框架

      xUtils同Afinal一样属于聚合型框架, 大而全,但是越容易牵一发而动全身。所以不推荐使用,只做了解即可.应付手头临时项目.

      Android 开源框架 ( 四 ) Afinal --- Android 里的 ORM IOC聚合型框架

    一.Xutils 介绍

      Xutils是基于afinal开发的,但是比afinal稳定性提高了不少.xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
      xUitls最低兼容android 2.2.

      XUtils四大模块: 

    DbManager  数据库访问接口
        android中的orm框架,一行代码就可以进行增删改查;     支持事务,默认关闭;     可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);     支持绑定外键,保存实体时外键关联实体自动保存或更新;     自动加载外键关联实体,支持延时加载;     支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。 
    ViewInjector view注入接口
            android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
            新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
            目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。        
    HttpManager http请求接口
          支持同步,异步方式的请求;
        支持大文件上传,上传大文件不会oom;
        支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
        下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
        返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。    
    
    ImageManager 图片绑定接口
          加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
        支持加载网络图片和本地图片;
        内存管理使用lru算法,更好的管理bitmap内存;
        可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
    

      混淆配置:

        1. 添加Android默认混淆配置${sdk.dir}/tools/proguard/proguard-android.txt
        2. 不要混淆xUtils中的注解类型,添加混淆配置:-keep class * extends java.lang.annotation.Annotation { *; }
        3. 对使用DbUtils模块持久化的实体类不要混淆,或者注解所有表和列名称@Table(name="xxx"),@Id(column="xxx"),@Column(column="xxx"),@Foreign(column="xxx",foreign="xxx");

    二.Xutils 使用

    1.引入示例module

        

    2.记得授权

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    3.Application里初始化

    public class MyApplication extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            x.Ext.init(this);
            x.Ext.setDebug(BuildConfig.DEBUG); // 开启debug会影响性能
        }
    }

    4.DbManager操作数据库

    DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
                .setDbName("test.db")
                // 不设置dbDir时, 默认存储在app的私有目录.
                .setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单, 先这样写了.
                .setDbVersion(2)
                .setDbOpenListener(new DbManager.DbOpenListener() {
                    @Override
                    public void onDbOpened(DbManager db) {
                        // 开启WAL, 对写入加速提升巨大
                        db.getDatabase().enableWriteAheadLogging();
                    }
                })
                .setDbUpgradeListener(new DbManager.DbUpgradeListener() {
                    @Override
                    public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
                        // TODO: ...
                        // db.addColumn(...);
                        // db.dropTable(...);
                        // ...
                        // or
                        // db.dropDb();
                    }
                });
     DbManager db = x.getDb(daoConfig);        

    最终都是调用xutils lib里的db包里的DbModelSelector类转换为sql语句操作sqlLite数据库

            

    5.HttpManager请求,ImageManager加载图片

    private void loadImgList(String url) {
            //HttpManager异步GET请求
            x.http().get(new RequestParams(url), new Callback.CommonCallback<String>() {
                @Override
                public void onSuccess(String result) {
                    imageListAdapter.addSrc(getImgSrcList(result));
                    imageListAdapter.notifyDataSetChanged();//通知listview更新数据
                }
    
                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
    
                }
    
                @Override
                public void onCancelled(CancelledException cex) {
    
                }
    
                @Override
                public void onFinished() {
    
                }
            });
        }
    ImageOptions imageOptions;
        imageOptions = new ImageOptions.Builder()
                    .setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))
                    .setRadius(DensityUtil.dip2px(5))
                    // 如果ImageView的大小不是定义为wrap_content, 不要crop.
                    .setCrop(true) // 很多时候设置了合适的scaleType也不需要它.
                    // 加载中或错误图片的ScaleType
                    //.setPlaceholderScaleType(ImageView.ScaleType.MATRIX)
                    .setImageScaleType(ImageView.ScaleType.CENTER_CROP)
                    .setLoadingDrawableId(R.mipmap.ic_launcher)
                    .setFailureDrawableId(R.mipmap.ic_launcher)
                    .build();
    x.image().bind(iv_big_img, getIntent().getStringExtra("url"), imageOptions);



  • 相关阅读:
    ORACLE 查找数据库中有记录的表
    [原]Asp.Net 错误:无法连接到Asp.Net Developement server
    中国移动手机话费查询号码1008611
    动手修改VS2008的解决方案文件,以让VS2005打开它
    [转]飞秋使用说明与常见问题解决方法
    微软发布Fix it 修复Windows 7等系统0day漏洞
    Oracle DECODE 函数应用示例
    [转]C#实现访问网络共享文件夹
    c#保留小数点后位数的方法
    [转]微软紧急修复高危漏洞 30万网民PC已遭攻击
  • 原文地址:https://www.cnblogs.com/bugzone/p/Xutils.html
Copyright © 2011-2022 走看看