xutils找id空指针_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加载图片功能

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

接下来就是加载网络图片到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了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xp访问不了win10计算机,如何解决winxp访问win10共享打印机提示凭据不足

在win10的电脑上对着始按钮点鼠标右键&#xff0c;点击运行&#xff0c;或者直接“winR”输入gpedit.msc&#xff0c;点击确定&#xff0c;在本地策略组编辑器中依次点开——计算机配置——windows设置——安全设置——本地策略——安全选项&#xff0c;在右边的列表中找到“网…

centos7 关闭selinux_Devops之LDAP部署安装(centos7+openLDAP+PhpLDAPAdmin)

Devops之LDAP部署安装(centos7openLDAPPhpLDAPAdmin)由于公司部门的需求&#xff0c;需要搭建ldap来统一Devops的用户名和密码&#xff0c;具体的选择LDAP分析在上一篇里&#xff0c;这里主要记录一下部署centos7openLDAPPhpLDAPAdmin来实现Ldap服务&#xff0c;并使用phpldapa…

微信时代计算机教学,互联网+时代技工院校计算机教学方式研究

刘兆慧摘 要&#xff1a;互联网时代的到来让几乎每一个行业的生产经营方式发生巨大变革&#xff0c;教育行业也不可避免。本文就技工院校计算机在互联网时代背景下采取的教学方式进行研究。本次研究采取了实验法、观察法、比较法等研究方法。结果显示&#xff0c;在互联网环境下…

python编写add函数求和_为什么python不利用__iadd__来实现求和和链接运算符?

我刚做了一个有趣的测试&#xff1a;~$python3 # I also conducted this on python 2.7.6, with the same resultPython 3.4.0 (default, Apr 11 2014, 13:05:11)[GCC 4.8.2] on linuxType "help", "copyright", "credits" or "license&quo…

python count函数用法 comm_python3:MySQL 8.0学习笔记(第五部分:单表查询操作)

在讲解单表查询时&#xff0c;首先创建一个emp的员工表&#xff0c;表中字段包括&#xff1a;empno&#xff08;员工编号&#xff09;、ename&#xff08;员工姓名&#xff09;、job&#xff08;员工职位&#xff09;、mgr&#xff08;员工领导&#xff09;、hiredate&#xff…

该计算机没有运行windows无线服务器,老司机示范win7系统诊断提示此计算机上没有运行的windows无线服务的恢复方法...

随着win7系统的普及&#xff0c;大家是否遇到过win7系统诊断提示此计算机上没有运行的windows无线服务的情况&#xff0c;近日就有朋友向我反映win7系统诊断提示此计算机上没有运行的windows无线服务的问题&#xff0c;那么我们应该如何处理win7系统诊断提示此计算机上没有运行…

mysql主库从库在同一台服务器_MySQL数据库的主从配置(多主对一从)

一、实验环境部署主服务器 192.168.18.42 端口3306 》 从服务器 192.168.18.44 端口 3306主服务器 192.168.18.43 端口3306 》 从服务器 192.168.18.44 端口 3307##数据库&#xff0c;已经安装mysql服务&#xff0c;安装部分略。从服务器上的多个mysql实例&#xff0c;请看另…

golang int64转string_(一)Golang从入门到原地起飞

1、Golang 变量定义方法&#xff1a;1&#xff09;定义变量 变量名 类型 表达式var go string "hello" 2&#xff09;在函数内部&#xff0c;可以使用更简略的 : 方式声明并初始化变量。注意&#xff1a;短变量只能用于声明局部变量&#xff0c;不能用于全局变量的…

domino缺省注册服务器或无法访问,Domino服务器挂起时的现象

1。Domino 服务器挂起时的现象&#xff1a;2。Domino 服务器挂起时需要收集的数据&#xff1a;3。Domino 服务器需要在notes.ini中添加的参数&#xff1a;4。有关QNC/Nsd&#xff1a;5。设置Statrep.nsf 的方法&#xff1a;6。有关用Debug_Capture_Timeout1来收集信号灯的数据信…

latex 分页_latex 图片跨页显示问题???

latex 中一个页面有很多图片&#xff0c;超出一页就显示不出来了&#xff1a;请问怎么让后续图片显示在一个新页面中&#xff1f;图片显示代码如下每行显示三张&#xff1a;\begin{figure}\centering\includegraphics[width1.8 in]{images/Fig5_Sample11a.jpg}\quad\includegra…

session传递参数_JWT与Session的比较

如今&#xff0c;越来越多的项目开始采用JWT作为认证授权机制&#xff0c;那么它和之前的Session究竟有什么区别呢&#xff1f;今天就让我们来了解一下。JWT是什么定义JSON Web Token(JWT)是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑和自包含的方式&#xff0c;用于…

scp复制本地文件到远程服务器,scp 本地文件到远程服务器

linux中scp命令的使用linux远程拷贝文件命令:scp(scp:secure corp)(1)从本地拷贝文件到远程服务器scp/opt/script/test.pl root192.168.3.130:~/将本地/opt/scritp/文件夹下的test.pl脚本文件拷贝到远程服务器192.168.3.130的用户目录下...文章科技小能手2017-11-12758浏览量li…

keras 分布式_TensorFlow 2.0正式版官宣!深度集成Keras

新智元报道 来源&#xff1a;medium、GitHub编辑&#xff1a;小芹、大明【新智元导读】TensorFlow 2.0正式版终于发布了&#xff01;深度集成Keras&#xff0c;更简单、更易用&#xff0c;GPU训练性能提升。这是一个革命性的新版本&#xff0c;欢迎来到 TensorFlow 2.0&#x…

python定义空列表lt_Pythonlt;1gt;List

list里的元素以逗号隔开&#xff0c;以[]包围&#xff0c;当中元素的类型随意 官方一点的说&#xff1a;list列表是一个随意类型的对象的位置相关的有序集合。 它没有固定的大小(1)。通过对偏移量 (2)进行赋值以及其它各种列表的方法进行调用&#xff0c;可以改动列表的大小。 …

新天龙官网服务器更新消息,新天龙八部怀旧服太火,增开7组服务器不够用,还得继续扩容...

原标题&#xff1a;新天龙八部怀旧服太火&#xff0c;增开7组服务器不够用&#xff0c;还得继续扩容最近《新天龙八部》怀旧服上线的消息&#xff0c;相信各位都有耳闻&#xff0c;作为国产最经典的网游之一&#xff0c;新天龙开怀旧服自然吸引了无数老玩家回归。而且还有很多路…

大疆云台如何使用华为mate20pro_华为Mate30+大疆灵眸Osmo3,让你的照片和短视频称霸朋友圈...

自华为Mate30国内上市以后&#xff0c;短短几天刷爆朋友圈&#xff0c;尤其是Mate30pro现在更是一机难求。华为Mate30pro打造了全球首款4000万像素电影级拍摄手机&#xff0c;华为Mate30pro支持7680帧超慢速摄影&#xff0c;支持4K HDR拍摄&#xff0c;以及双OIS防抖。2019年8月…

c语言int转字符串_C语言零基础入门-指针-05

C语言零基础入门-指针-05本节要点&#xff1a;1&#xff0c;字符指针。2&#xff0c;字符串指针。3&#xff0c;指针的参数传递4&#xff0c;多重指针01. 字符指针这里的定义与前面的基本一样&#xff0c;所谓的字符指针就是这个指针指向的是一个字符型的变量。01.1 单个字符代…

圆平移后的方程变化_平移法解题

提要平面内把一个图形沿着一定的方向移动一定的距离得到另一个图形&#xff0c;这种变换称为平移变换。根据需要&#xff0c;平移的对象可以是线段&#xff0c;直线&#xff0c;角&#xff0c;圆&#xff0c;整个图形等。平移只改变图形的位置&#xff0c;不改变图形的形状和大…

有没有什么方法快速能找到导致软件崩溃的进程_崩溃!电脑突然黑屏无法启动...

Hello&#xff01;我是爽哥&#xff0c;欢迎你的到来&#xff0c;我会不定期推送关于电脑方面的实用教程及资讯&#xff0c;点击上方蓝色字体公众号名称“爽哥来搞机”关注我&#xff0c;实用干货全部拿走&#xff01;什么?!为什么我的电脑一直黑屏无法开机了&#xff0c;昨天…

服务器内存会显示ecc么,服务器内存ecc

服务器内存ecc 内容精选换一换设备实时状态查询是检测设备在运行过程中的状态信息。用户可任选以下指令之一查看设备实时状态查询命令的可用参数。ascend-dmi -i -hascend-dmi -i --help各参数解释如表1所示。以查看芯片的详细信息为例。ascend-dmi -i -dt若推理服务器返回如图…