说实话,对于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加载图片功能

现在我们需要设置两个权限,如下:

接下来就是加载网络图片到imageView中:

也可以设置参数:

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还有点不足。

5.导入xUtils工程到Android Studio

下载地址如下:

㈠将下载的工程复制到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找id空指针_xUtils更新到3.0后的基本使用规则相关推荐

  1. xutils找id空指针_xutils3上传图片

    xutils是国内wyoufif大神写的一个牛逼的开源库,功能挺全面的(单图上传.批量上传(图片)文件.加载网路图片等).但是xutils以前的版本是基于httpclient的,者本来对于androi ...

  2. xutils找id报空指针异常

    xutils找id报空指针异常,遇到这个问题看子页面是否没有加入 这行代码 ViewUtils.inject(this, mHomeView); @ViewInject(R.id.flash_view ...

  3. 三星s9 android8.1.0,三星S9更新安卓9.0后Bixby运行异常

    原标题:三星S9更新安卓9.0后Bixby运行异常 IT之家12月27日消息 目前,三星在部分地区已经向三星S9系列机型推送了安卓9.0更新,除了全新的One UI之外,也带来了全新的Bixby 2. ...

  4. swift 1.0更新为2.0后的变化

    很久没看swift.以前写的代码出现了很多问题.抛弃之. println已经变成了print了. 字符串的长度从以前的count(str) 变成现在的str7.characters.count了. 字 ...

  5. 三星s9更新android9.0 体验,国行三星Galaxy S9系列更新Android 9.0 界面更漂亮

    原标题:国行三星Galaxy S9系列更新Android 9.0 界面更漂亮 [手机中国新闻]时间已到2月份,三星Galaxy S9系列的Android 9.0系统升级终于来了.但是该系统更新仍在内测 ...

  6. 三星s9更新android9.0,国行三星Galaxy S9系列更新Android 9.0 界面更漂亮

    时间已到2月份,三星Galaxy S9系列的Android 9.0系统升级终于来了.但是该系统更新仍在内测阶段,只有三星Galaxy S9/S9+的内测用户能收到推送,三星Android 9.0正式版 ...

  7. mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键

    多表外键下将普通的id主键更新为uuid主键 2019-05-20 02:45:37 来源: 晴天小雨 0 摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQ ...

  8. mysql 重复了更新_MYSql id相同就更新

    ALTER TABLE B ADD CONSTRAINT fk_B_A FOREIGN KEY (ordersId) REFERENCES orderts(ordersId); 如果你还不是很明白的话 ...

  9. VS SDK更新问题(error MSB8036: 找不到 Windows SDK 版本10.0.14393.0)

    问题:error MSB8036: 找不到 Windows SDK 版本10.0.14393.0,此时会造成项目编译失败 解决办法:下载相应版本的SDK安装,然后修改VS关于SDK版本的配置 WIN1 ...

最新文章

  1. 开源Wiki系统:XWiki 2.0.2 发布
  2. 一种高效的可变行高列表行定位算法
  3. [转载]学习数据库分表和分库思想
  4. 五十三、爱彼迎数据集分析建模
  5. linux系统生成的新文件是什么编码的,Linux系统的默认编码设置
  6. OAuth2.0详解
  7. python函数的内涵_python内涵段子文章爬取
  8. 模拟电子技术不挂科学习笔记1(半导体基础、二极管)
  9. 随想录(强大的kprobe)
  10. SharePoint如何模拟用户
  11. linux下qemu共享文件夹,QEMU Windows来宾和Linux主机之间的共享文件夹
  12. Spring Boot,Sprint Batch 学习
  13. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板)【含Matlab源码 858期】
  14. 公安部就《易制爆危险化学品治安管理办法》征求意见
  15. 三容水箱液位控制系统_基于Labview软件编程的三容水箱液位控制系统
  16. ai中如何插入签名_如何在PDF文档中插入文本框?
  17. linux 提取网卡驱动,linux(ubuntu18.04)系统上安装RTL8822CE网卡驱动
  18. 兔子、狼、狐狸、王八
  19. VS2010如何打开VS2012的项目
  20. mysql(8.0.28)设置开机自启动

热门文章

  1. linux 中如何查看块设备,在linux中,如何确定使用块设备的进程?
  2. C语言ODBC连接MySQL数据库制作简易用户登录系统
  3. ❤️❤️❤️【资料免费领取】简历模板、职场PPT模板、硬核学习资料+PDF资料(Java、Python、大数据、机器学习)❤️❤️❤️
  4. Android IDA 动态调试最完善攻略,跨过各种坑
  5. PostgreSQL+安装及常见问题
  6. 软件文档 服务器上,服务器上需要什么软件
  7. 2021年程序员1月薪资统计,你在哪一档?
  8. java new expression,JAVA公式解析示例
  9. mysql 集群与主从_Mysql集群和主从
  10. nginx 一个请求发给多台机器_配置Nginx实现负载均衡