xUtils更新到3.0后的基本使用规则
说实话,对于xUtils,是我最近才用到的开发框架(也是刚接触),对于其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是其最近更新到3.0也没有解决加载自定义ImageView报错的问题。
我总是喜欢用一些最新的东西,xUtils 3.0才刚更新,是一次比较大的重构,对于百度到的使用规则,基本都是3.0以前的,使得用3.0的开发者需要求解用法的时候,遇到许多阻碍,故此在这里简单介绍xUtils 3.0的使用规则。关于怎么导入功能,其实并不是本文的内容,不过在此文最后一节简单讲解了一下导入的方式。
1.xUtils中的IOC框架
使用xUtils的第一步就是必须创建自己的Application类,代码如下:
public class LYJApplication extends Application {@Override public void onCreate() {super.onCreate(); x.Ext.init(this);//Xutils初始化 } }
在AndroidManifest.xml的application标签中添加如下代码:
android:name=".LYJApplication"
这样初始化就算完成了。
使用IOC框架的代码如下:
import org.xutils.view.annotation.ContentView; import org.xutils.view.annotation.Event; import org.xutils.view.annotation.ViewInject; import org.xutils.x; @ContentView(value = R.layout.activity_main) public class MainActivity extends AppCompatActivity {@ViewInject(value = R.id.mybut)private Button mybut; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); x.view().inject(this); }@Event(value = R.id.mybut,type = View.OnClickListener.class)private void onButtonClick(View v){switch (v.getId()){case R.id.mybut:Toast.makeText(this,"你好我是Xutils的IOC功能",Toast.LENGTH_SHORT).show(); break; }} }
需要解释的以下几点:
其一:使用IOC必须全部为私有,不然无效,这里就做演示了,不信你可以把用到IOC框架的注解的成员变量及方法全部换成public ,那么全部会无效,当然除了ContentView例外。
其二,所有用到IOC成员变量,使用的时候,必须在x.view().inject(this)后,如果写在前面,那么程序会崩溃。
2.xUtils加载图片功能
现在我们需要设置两个权限,如下:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
接下来就是加载网络图片到imageView中:
x.image().bind(image,"http://pic.baike.soso.com/p/20090711/20090711101754-314944703.jpg");
也可以设置参数:
ImageOptions imageOptions = new ImageOptions.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,且必须提供获取数据库的方法,使得在应用程序的任何地方都可以直接获取数据库,并操作数据库,不然重复的获取与释放只能增加内存无谓的消耗。
初始化数据库:
public class LYJApplication extends Application {private DbManager.DaoConfig daoConfig; public DbManager.DaoConfig getDaoConfig() {return daoConfig; }@Override public void onCreate() {super.onCreate(); x.Ext.init(this);//Xutils初始化 daoConfig = new DbManager.DaoConfig().setDbName("lyj_db")//创建数据库的名称 .setDbVersion(1)//数据库版本号 .setDbUpgradeListener(new DbManager.DbUpgradeListener() {@Override public void onUpgrade(DbManager db, int oldVersion, int newVersion) {// TODO: ... // db.addColumn(...); // db.dropTable(...); // ... }});//数据库更新操作 } }
上面的注释明了,有必要说明的一点是setDbDir(new File("/sdcard")),可以将数据库存储在你想存储的地方,如果不设置,那么数据库默认存储在/data/data/你的应用程序/database/xxx.db下。这里我们就默认放在应用程序下。
我们首先创建一个实体类,如下:
@Table(name="lyj_person") public class LYJPerson {@Column(name = "id", isId = true)private int id; @Column(name = "name")private String name; @Column(name = "age")private String age; public String getAge() {return age; }public void setAge(String age) {this.age = age; }public int getId() {return id; }public void setId(int id) {this.id = id; }public String getName() {return name; }public void setName(String name) {this.name = name; } }
通过实体类可以直接操作数据库。
我们在Application中加入如下代码,向数据库添加数据:
DbManager db = x.getDb(daoConfig); LYJPerson person1=new LYJPerson(); person1.setName("liyuanjinglyj"); person1.setAge("23"); LYJPerson person2=new LYJPerson(); person2.setName("xutilsdemo"); person2.setAge("56"); try {db.save(person1); db.save(person2); } catch (DbException e) {e.printStackTrace(); }
在Activity中操作获取数据库数据的代码如下:
DbManager db = x.getDb(((LYJApplication)getApplicationContext()).getDaoConfig()); try {List<LYJPerson> lyjPersons=db.selector(LYJPerson.class).findAll(); for (int i=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的异步网络请求,同步的自行探究。
使用格式如下:
RequestParams params = new RequestParams("http://blog.csdn.net/mobile/experts.html"); x.http().get(params, new Callback.CommonCallback<String>() {@Override public void onSuccess(String result) {Document doc = Jsoup.parse(result); Element div = doc.select("div.list_3").get(0); Elements imgs = div.getElementsByTag("img"); for (int i = 0; i < imgs.size(); i++) {Element img = imgs.get(i); Log.i("liyuanjinglyj",img.attr("alt")); }}@Override public void onError(Throwable ex, boolean isOnCallback) {}@Override public void onCancelled(Callback.CancelledException cex) {}@Override public void onFinished() {} });
这里获取的是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后的基本使用规则相关推荐
- xutils找id空指针_xUtils更新到3.0后的基本使用规则
说实话,对于xUtils,是我最近才用到的开发框架(也是刚接触),对于其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是其最近更新到3.0也没有解决加载自定义ImageView报错的 ...
- 三星s9 android8.1.0,三星S9更新安卓9.0后Bixby运行异常
原标题:三星S9更新安卓9.0后Bixby运行异常 IT之家12月27日消息 目前,三星在部分地区已经向三星S9系列机型推送了安卓9.0更新,除了全新的One UI之外,也带来了全新的Bixby 2. ...
- swift 1.0更新为2.0后的变化
很久没看swift.以前写的代码出现了很多问题.抛弃之. println已经变成了print了. 字符串的长度从以前的count(str) 变成现在的str7.characters.count了. 字 ...
- android apt最新版本,解决Android studio 2.3升级到Android studio 3.0 后apt报错问题
解决Android studio 2.3升级到Android studio 3.0 后apt报错问题 发布时间:2020-09-16 19:59:42 来源:脚本之家 阅读:62 作者:哈特中尉 1. ...
- 三星s9更新android9.0 体验,国行三星Galaxy S9系列更新Android 9.0 界面更漂亮
原标题:国行三星Galaxy S9系列更新Android 9.0 界面更漂亮 [手机中国新闻]时间已到2月份,三星Galaxy S9系列的Android 9.0系统升级终于来了.但是该系统更新仍在内测 ...
- 三星s9更新android9.0,国行三星Galaxy S9系列更新Android 9.0 界面更漂亮
时间已到2月份,三星Galaxy S9系列的Android 9.0系统升级终于来了.但是该系统更新仍在内测阶段,只有三星Galaxy S9/S9+的内测用户能收到推送,三星Android 9.0正式版 ...
- 魅族系统更新flyme 8.0.0.0A后,卡到爆的进来!
魅族系统更新flyme 8.0.0.0A后,卡到爆的进来! 依次点开: 设置--辅助功能--游戏模式"关闭" 瞬间流畅!!
- 升级android10后费电,荣耀V20升级更新安卓10的Magic UI 3.0后耗电速度变快了
荣耀V20升级更新安卓10的Magic UI 3.0后,手机的耗电速度变快了,大家有没有觉得,手机显示屏幕耗电特别快,界面好看了,耗电快的夸张,平时看会新闻小说,顶多消耗百分之8,升级后消耗快百分之2 ...
- android 8.0手机无法更新版本,安卓手机升级安卓8.0后 系统以后可能都无法回退
你升级安卓8.0了吗?从谷歌发布正式算起,已经4个月过去了,然而根据官方的统计,现在的渗透率甚至1%都还不到. 为了推广升级,谷歌宣布安卓8.0之初就希望能推广Project Treble特性 ...
- pip19离线_更新pip为20后不显示下载链接无法离线下载回退pip版本
更新pip为20后不显示下载链接无法离线下载回退pip版本 先看log WARNING: You are using pip version 19.3.1; however, version 20.0 ...
最新文章
- c 语言冒泡排序,c 语言冒泡排序
- 单纯形 c语言 程序,单纯形法完全c语言程序
- VALSE 视觉资源汇总(视频+PPT+文章解读,持续更新)
- NumPy中的where()函数
- SQL Server 2008将数据导出到SQL脚本文件
- 吃瓜笔记 | 旷视研究院:被遮挡人脸区域检测的技术细节(PPT+视频)
- php 序列化匿名函数,在php中序列化匿名函数
- JSK-4 简单斐波那契【基础+打表+记忆化递归】
- How to Install Ruby on Rails on CentOS 6
- CSS3实现八方向云台控制器器样式
- 如何把PDF锁定,限制修改文档内容?
- 一大批裁员降薪企业名单在路上,你中了吗?
- [转载] 胡锡进:5000亿买一包爆米花 我不想让我的国家这样
- 从零搭建“人工智障”音箱
- 微信android 7.0版本下载地址,微信7.0官方版本下载,微信7.0官方版本下载 v7.0.15-安卓乐园安卓软件网...
- 【make】make常见问题
- 计算机网络协议——OSI、TCP数据、IP数据包、Ethernet 数据包
- 排序不等式的两种证明方法
- android节操播放器回调,节操播放器(简单使用)
- Microsoft Excel 2010表最多容纳的行数
热门文章
- 计算机主机结构3维图,台式主机内部结构图,主机结构图
- 如何在工具类中注入Service
- 微软drive服务器,OneDrive:微软云存储服务
- 小马哥---高仿山寨三星S8出世 谨防购买到假货!! 高仿三星S8 s305刷机拆机主板图示
- ReviewBoard代码评审实践总结
- 简单工厂模式、工厂模式以及抽象工厂模式(具体)
- c语言中文网qq,c语言写的qq连看辅助
- 视频教程-2020年软考网络工程师基础知识历年真题详解软考视频教程-软考
- Chinaitlab技术及认证专题大全[第二辑] 09年8月03日更新
- 计算机函数求销售额公式,利用excel函数公式中的LARGE函数和SUM函数提取前五名的销售额...