xUtils更新到3.0后的基本使用规则
说实话,对于xUtils,是我最近才用到的开发框架(也是刚接触),对于其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是其最近更新到3.0也没有解决加载自定义ImageView报错的问题。
我总是喜欢用一些最新的东西,xUtils 3.0才刚更新,是一次比较大的重构,对于百度到的使用规则,基本都是3.0以前的,使得用3.0的开发者需要求解用法的时候,遇到许多阻碍,故此在这里简单介绍xUtils 3.0的使用规则。关于怎么导入功能,其实并不是本文的内容,不过在此文最后一节简单讲解了一下导入的方式。
1.xUtils中的IOC框架
使用xUtils的第一步就是必须创建自己的Application类,代码如下:
| 1 2 3 4 5 6 7 | publicclassLYJApplication extendsApplication {    @Override    publicvoidonCreate() {        super.onCreate();        x.Ext.init(this);//Xutils初始化    }} | 
在AndroidManifest.xml的application标签中添加如下代码:
android:name=”.LYJApplication”
这样初始化就算完成了。
使用IOC框架的代码如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | importorg.xutils.view.annotation.ContentView;importorg.xutils.view.annotation.Event;importorg.xutils.view.annotation.ViewInject;importorg.xutils.x;@ContentView(value = R.layout.activity_main)publicclassMainActivity extendsAppCompatActivity {    @ViewInject(value = R.id.mybut)    privateButton mybut;    @Override    protectedvoidonCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        x.view().inject(this);    }    @Event(value = R.id.mybut,type = View.OnClickListener.class)    privatevoidonButtonClick(View v){        switch(v.getId()){            caseR.id.mybut:                Toast.makeText(this,"你好我是Xutils的IOC功能",Toast.LENGTH_SHORT).show();                break;        }    }} | 
需要解释的以下几点:
其一:使用IOC必须全部为私有,不然无效,这里就做演示了,不信你可以把用到IOC框架的注解的成员变量及方法全部换成public ,那么全部会无效,当然除了ContentView例外。
其二,所有用到IOC成员变量,使用的时候,必须在x.view().inject(this)后,如果写在前面,那么程序会崩溃。
2.xUtils加载图片功能
现在我们需要设置两个权限,如下:
| 1 2 | <uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> | 
接下来就是加载网络图片到imageView中:
x.image().bind(image,”http://pic.baike.soso.com/p/20090711/20090711101754-314944703.jpg“);
也可以设置参数:
| 1 2 3 4 5 6 7 8 9 | ImageOptions imageOptions = newImageOptions.Builder()        .setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))//图片大小        .setRadius(DensityUtil.dip2px(5))//ImageView圆角半径        .setCrop(true)// 如果ImageView的大小不是定义为wrap_content, 不要crop.        .setImageScaleType(ImageView.ScaleType.CENTER_CROP)        .setLoadingDrawableId(R.mipmap.ic_launcher)//加载中默认显示图片        .setFailureDrawableId(R.mipmap.ic_launcher)//加载失败后默认显示图片        .build();x.image().bind(image, "http://pic.baike.soso.com/p/20090711/20090711101754-314944703.jpg",imageOptions); | 
你也可以将第2个参数设置为图片文件路径,那么将从SD卡中加载图片。
3.xUtils操作数据库
我们都知道,一个App中操作数据库的地方有很多,就像是否登录一样,有些地方必须登录后才能操作,那么肯定是全局变量,所以,必须将数据库的初始化放在Application,且必须提供获取数据库的方法,使得在应用程序的任何地方都可以直接获取数据库,并操作数据库,不然重复的获取与释放只能增加内存无谓的消耗。
初始化数据库:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | publicclassLYJApplication extendsApplication {    privateDbManager.DaoConfig daoConfig;    publicDbManager.DaoConfig getDaoConfig() {        returndaoConfig;    }    @Override    publicvoidonCreate() {        super.onCreate();        x.Ext.init(this);//Xutils初始化        daoConfig = newDbManager.DaoConfig()                .setDbName("lyj_db")//创建数据库的名称                .setDbVersion(1)//数据库版本号                .setDbUpgradeListener(newDbManager.DbUpgradeListener() {                    @Override                    publicvoidonUpgrade(DbManager db, intoldVersion, intnewVersion) {                        // TODO: ...                        // db.addColumn(...);                        // db.dropTable(...);                        // ...                    }                });//数据库更新操作    }} | 
上面的注释明了,有必要说明的一点是setDbDir(new File(“/sdcard”)),可以将数据库存储在你想存储的地方,如果不设置,那么数据库默认存储在/data/data/你的应用程序/database/xxx.db下。这里我们就默认放在应用程序下。
我们首先创建一个实体类,如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | @Table(name="lyj_person")publicclassLYJPerson {    @Column(name = "id", isId = true)    privateintid;    @Column(name = "name")    privateString name;    @Column(name = "age")    privateString age;    publicString getAge() {        returnage;    }    publicvoidsetAge(String age) {        this.age = age;    }    publicintgetId() {        returnid;    }    publicvoidsetId(intid) {        this.id = id;    }    publicString getName() {        returnname;    }    publicvoidsetName(String name) {        this.name = name;    }} | 
通过实体类可以直接操作数据库。
我们在Application中加入如下代码,向数据库添加数据:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | DbManager db = x.getDb(daoConfig);LYJPerson person1=newLYJPerson();person1.setName("liyuanjinglyj");person1.setAge("23");LYJPerson person2=newLYJPerson();person2.setName("xutilsdemo");person2.setAge("56");try{    db.save(person1);    db.save(person2);} catch(DbException e) {    e.printStackTrace();} | 
在Activity中操作获取数据库数据的代码如下:
| 1 2 3 4 5 6 7 8 9 10 | DbManager db = x.getDb(((LYJApplication)getApplicationContext()).getDaoConfig());try{    List<LYJPerson> lyjPersons=db.selector(LYJPerson.class).findAll();    for(inti=0;i<lyjPersons.size();i++){        Log.i("liyuanjinglyj","LYJPerson"+i+".name="+lyjPersons.get(i).getName());        Log.i("liyuanjinglyj","LYJPerson"+i+".name="+lyjPersons.get(i).getAge());    }} catch(DbException e) {    e.printStackTrace();} | 
那么肯定会得到如下结果:
4.xUtils的网络请求
Android规定UI线程是不能涉及网络任务的,所以,这里主要简单介绍Xutils的异步网络请求,同步的自行探究。
使用格式如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | x.http().get(params, newCallback.CommonCallback<String>() {    @Override    publicvoidonSuccess(String result) {        Document doc = Jsoup.parse(result);        Element div = doc.select("div.list_3").get(0);        Elements imgs = div.getElementsByTag("img");        for(inti = 0; i < imgs.size(); i++) {            Element img = imgs.get(i);            Log.i("liyuanjinglyj",img.attr("alt"));        }    }    @Override    publicvoidonError(Throwable ex, booleanisOnCallback) {    }    @Override    publicvoidonCancelled(Callback.CancelledException cex) {    }    @Override    publicvoidonFinished() {    }}); | 
这里获取的是CSDN移动博客专家的HTML页面信息,看看下面的日志,就知道Xutils网络功能还是很强大的。
本文最后附带了一下粗略模仿CSDN APP的源码,有意者可以下载看看,里面用到另一个开发框架,我用来专门处理图片的(afinal)。都说xUtils是afinal的进化版,不过在图片方面,我们觉得xUtils还有点不足。
http://download.csdn.net/detail/liyuanjinglyj/9379103
5.导入xUtils工程到Android Studio
下载地址如下:
https://github.com/wyouflf/xUtils3/tree/master
㈠将下载的工程复制到Project目录下:
㈡添加到settings.gradle文件:
include ‘:app’,':xutils’
㈢编译到工程中
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile project(':xutils')
}
㈣将xutils文件夹下的build.gradle中的版本与最低版本调整到与创建工程一致
compileSdkVersion 23
buildToolsVersion "23.0.1" defaultConfig {
minSdkVersion 15
targetSdkVersion 23
versionCode 20151224
versionName version
}
㈤添加如下代码到build.gradle(Project:XutilsDemo)中
dependencies {
    classpath 'com.android.tools.build:gradle:1.3.0'
    classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
    classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
其中红色标记为添加的代码。
点击Sync now就可以使用xUtils了。
xUtils更新到3.0后的基本使用规则的更多相关文章
- android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令
		android studio从1.5更新到2.0后terminal无法运行gradle命令,提示无法找到gradle命令. 'gradle' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 设 ... 
- 更新到.netcore3.0后找不到dotnet-ef的解决办法
		在项目根目录下建立global.json文件 { "sdk": { "version": "2.2.402" } } 或使用命令 dotne ... 
- Android studio 升级,不用下载完整版,完美更新到2.0
		Android studio 2.0 公布已有一旦时间,据说,速度大大提高了.但是一直没有尝试更新,看到大家相继更新,所以迫不及待就准备更新,但是.更新之路确实异常坎坷.询问度娘,千奇百怪的问题接憧而 ... 
- 为什么FFT时域补0后,经FFT变换就是频域进行内插?
		应该这样来理解这个问题: 补0后的DFT(FFT是DFT的快速算法),实际上公式并没变,变化的只是频域项(如:补0前FFT计算得到的是m*2*pi/M处的频域值, 而补0后得到的是n*2*pi/N处的 ... 
- 更新Mac OSX XCode后Git 不能使用提示Can't start Git: /usr/bin/git
		更新Mac OSX XCode后Git 不能使用提示Can't start Git: /usr/bin/git 解决办法: 终端运行 sudo xcodebuild -license 同意协议就好了. 
- ios pod库更新到1.0或1.0.1之正确修改podfile文件
		今天看到cocopods都更新到1.0.1了,之前什么时候更新到的1.0都没发现,刚刚更新一下之后,立马出现了一大堆的错误. 如果没有更新的话,建议不要更新!!!书写麻烦了! 现在记录如何一步一步去除 ... 
- IIS6(Win2003) 使用.net 4.0 后,默认文档失效解决方案。
		IIS6(Win2003) 使用.net framework 4.0 后,默认文档失效解决方案. 用.net framework 4.0 开发的WEB项目,但放到iis6 中无法使用默认文档,状况如下 ... 
- xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)
		xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题) 前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是 ... 
- 关于Android Studio升级到2.0后和Gradle插件不兼容的问题
		今天升级AS到2.0后,用AS在真机上调试,发现报了如下错误: This version of Android Studio is incompatible with the Gradle Plugi ... 
随机推荐
- WPFの exit()和close()两个方法的用法
			Application.Exit 方法 通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口. Form.Close 方法 关闭窗体. 如果该窗体是应用程序的主启动窗体,则 ... 
- Jams倒酒(pour)
			1.Jams倒酒(pour) Jams是一家酒吧的老板,他的酒吧提供2种体积的啤酒,a ml 和 b ml,分别使用容积为a ml 和 b ml的酒杯来装载. 酒吧的生意并不好.Jams发现酒鬼们都很 ... 
- Linux下常用的shell命令记录1
			硬件篇 CPU相关 lscpu #查看的是cpu的统计信息. cat /proc/cpuinfo #查看CPU信息详细信息,如每个CPU的型号,主频等 内存相关 free -m #概要查看内存情况 ... 
- Mysql基础语法
			mysql SELECT VERSION(), CURRENT_DATE, now();select user(); create database pets;show databases; use ... 
- ASP.NET API盘点
			1.控制只返回JSON一种数据 public class JsonContentNegotiator : IContentNegotiator { private readonly JsonMedia ... 
- 用PyAIML开发简单的对话机器人
			AIML files are a subset of Extensible Mark-up Language (XML) that can store different text patterns ... 
- Limiting To Select Only 5 Check Boxes Out Of Ten In Oracle Forms
			Suppose you want to give an option to user to select only 5 check boxes from given any number of che ... 
- mysql数据小姿势
			CREATE TABLE `information` ( `NUMBER` bigint(20) NOT NULL AUTO_INCREMENT,//将number设为自增字段 `USER_NAM ... 
- [SAP ABAP开发技术总结]Function远程、同步、异步调用
			声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ... 
- 委托、匿名方法、Lambda表达式的演进
			摘自:"http://www.cnblogs.com/eagle1986/archive/2012/01/19/2327358.html 假设给我们一个泛型对象List<T>,T ... 
