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);

原文地址:https://www.cnblogs.com/bugzone/p/Xutils.html

时间: 2024-10-06 00:24:50

Android 开源框架 ( 五 ) xUtils --- Android 里的 ORM IOC聚合型框架的相关文章

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

Afinal 是一个android的sqlite的 orm 和 ioc 框架.是一种聚合型框架, 大而全.所以不推荐使用,只做了解即可.应付手头临时项目. 推荐阅读,这么多开源框架,该用哪个好?: 一.引言 Afinal是一个开源的android的orm和ioc应用开发框架.在android应用开发中,FinalActivity模块通过Afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定.Afinal的orm框架,很轻松的就可以对android的sqlite数据库进行增删改查操

Android 开源项目 eoe 社区 Android 客户端(转)

本文内容 环境 开源项目 eoe 社区 Android 客户端 本文介绍 eoe 社区 Android 客户端.它是一个开源项目,功能相对简单,采用侧边菜单栏.可以学习一下.点击此处查看 GitHub 上的项目. 今天调试几个开源的 Andriod 项目,像什么 oschina,apolloMod 等等,都跑不起来,nnd 郁闷了,不是这有问题,就是那有问题.尤其是 apolloMod,用了很多三方库,完全跑不起来嘛,最无奈的是 oschina,必须将 API 降到 15,也就是 Android

Android 开源项目 eoe 社区 Android 客户端

本文内容 环境 开源项目 eoe 社区 Android 客户端 本文介绍 eoe 社区 Android 客户端.它是一个开源项目,功能相对简单,菜单采用侧边栏方式.可以学习一下.点击此处查看 GitHub 上的项目. GitHub下载 本地下载 环境 Windows 2008 R2 64 位 Eclipse ADT V22.6.2,Android 4.4.3 SAMSUNG GT-I9008L,Android OS 2.2.2 开源项目 eoe 社区 Android 客户端 启动过程,Andro

Android学习(五)—— Android初级控件

Android初级控件 从今天开始就对Android进行正式的学习,首先先来学习一下初级的控件 1.TextView  文本框,用于显示文字,不可编辑. 常用属性 android:autoLink   设置是否当文本为URL链接/email/号码/map时,文本显示为可点击的链接.可选值(none/web /email/phone/map/all) android:cursorVisible  设定光标为显示/隐蔽,默认显示 android:drawableBottom  在text的下方显示一

Android开源项目:GifView——Android显示GIF动画

下载:http://code.google.com/p/gifview/downloads/list 简介:android中现在没有直接显示gif的view,只能通过mediaplay来显示,且还常常不能正常显示出来,为此写了这个gifview,其用法和imageview一样 使用方法: 1-把GifView.jar加入你的项目. 2-在xml中配置GifView的基本属性,GifView继承自View类,和Button.ImageView一样是一个UI控件.如: <com.ant.liao.G

&lt;Android开源库&gt; Realm For Android~ Getting Help and Models(译文)

帮助 编程问题?询问StackOverflow, 我们会积极地监督和回答问题! 提交Bug? 在我们的repo打开一个问题. 如果可以的话,请告知我们Realm版本,完整日志,Realm文件和显示问题的项目. 功能请求? 在我们的repo打开一个问题. 告诉我们该功能应该做什么,以及为什么需要该功能. 想了解接下来我们会更新什么内容? 看看我们的changelog. 日志显示我们计划最近发布的最新添加和更改,以及Realm的发展历史. 模型 Realm model类都是RealmObject的子

Android开源项目及库搜集

TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending,github搜索:https://github.com/search 目录 UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其它 动画 网络相关 响应式编程 地图 数据库 图像浏览及处理 视频音频处理 测试及调试 动态更新热更新 消息推送 完整项目 插件 出名框架 其他 好的文章 收集android上开源的酷炫的交互动画和视觉

59.Android开源项目及库 (转)

转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E5%8D%AB%E6%98%9F%E8%8F%9C%E5%8D%95 目录 UI UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其它 动画 网络相关 响应式编程 地图 数据库 图像浏览及处理 视频音频处理 测试及调试 动态更新热更新 消息推送

Android开源框架ViewPageIndicator和ViewPager实现Tab导航

前言: 关于使用ViewPageIndicator和ViewPager实现Tab导航,在开发社区里已经有一堆的博客对其进行了介绍,假设我还在这里写怎样去实现.那简直就是老生常谈,毫无新奇感,并且.我也不觉得自己对ViewPageIndicator的理解会比别人好,毕竟我也是看着大神的帖子.在学习实践着. 那我还写这个有啥意义呢?事实上么,就是想在这里记录下.在使用ViewPageIndicator和ViewPager实现Tab导航时,大家有可能会遇到的坑.这个坑.须要我们开发时尽量去避免的. 啥