Android xUtils更新到3.0后的基本使用規(guī)則詳解
說(shuō)實(shí)話,對(duì)于xUtils,是我最近才用到的開(kāi)發(fā)框架(也是剛接觸),對(duì)于其功能不得不說(shuō),簡(jiǎn)化了很多的開(kāi)發(fā)步驟,可以說(shuō)是非常好的開(kāi)發(fā)工具,但是其最近更新到3.0也沒(méi)有解決加載自定義ImageView報(bào)錯(cuò)的問(wèn)題。
xUtils簡(jiǎn)介
xUtils 包含了很多實(shí)用的android工具。
xUtils 支持大文件上傳,更全面的http請(qǐng)求協(xié)議支持(10種謂詞),擁有更加靈活的ORM,更多的事件注解支持且不受混淆影響...
xUitls 最低兼容android 2.2 (api level 8)
我總是喜歡用一些最新的東西,xUtils 3.0才剛更新,是一次比較大的重構(gòu),對(duì)于百度到的使用規(guī)則,基本都是3.0以前的,使得用3.0的開(kāi)發(fā)者需要求解用法的時(shí)候,遇到許多阻礙,故此在這里簡(jiǎn)單介紹xUtils 3.0的使用規(guī)則。關(guān)于怎么導(dǎo)入功能,其實(shí)并不是本文的內(nèi)容,不過(guò)在此文最后一節(jié)簡(jiǎn)單講解了一下導(dǎo)入的方式。
1.xUtils中的IOC框架
使用xUtils的第一步就是必須創(chuàng)建自己的Application類,代碼如下:
public class LYJApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);//Xutils初始化
}
}
在AndroidManifest.xml的application標(biāo)簽中添加如下代碼:
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;
}
}
}
需要解釋的以下幾點(diǎn):
其一:使用IOC必須全部為私有,不然無(wú)效,這里就做演示了,不信你可以把用到IOC框架的注解的成員變量及方法全部換成public ,那么全部會(huì)無(wú)效,當(dāng)然除了ContentView例外。
其二,所有用到IOC成員變量,使用的時(shí)候,必須在x.view().inject(this)后,如果寫(xiě)在前面,那么程序會(huì)崩潰。
2.xUtils加載圖片功能
現(xiàn)在我們需要設(shè)置兩個(gè)權(quán)限,如下:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
接下來(lái)就是加載網(wǎng)絡(luò)圖片到imageView中:
x.image().bind(image,"http://pic.baike.soso.com/p/20090711/20090711101754-314944703.jpg");
也可以設(shè)置參數(shù):
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)//加載中默認(rèn)顯示圖片 .setFailureDrawableId(R.mipmap.ic_launcher)//加載失敗后默認(rèn)顯示圖片 .build(); x.image().bind(image, "http://pic.baike.soso.com/p/20090711/20090711101754-314944703.jpg",imageOptions);
你也可以將第2個(gè)參數(shù)設(shè)置為圖片文件路徑,那么將從SD卡中加載圖片。
3.xUtils操作數(shù)據(jù)庫(kù)
我們都知道,一個(gè)App中操作數(shù)據(jù)庫(kù)的地方有很多,就像是否登錄一樣,有些地方必須登錄后才能操作,那么肯定是全局變量,所以,必須將數(shù)據(jù)庫(kù)的初始化放在Application,且必須提供獲取數(shù)據(jù)庫(kù)的方法,使得在應(yīng)用程序的任何地方都可以直接獲取數(shù)據(jù)庫(kù),并操作數(shù)據(jù)庫(kù),不然重復(fù)的獲取與釋放只能增加內(nèi)存無(wú)謂的消耗。
初始化數(shù)據(jù)庫(kù):
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")//創(chuàng)建數(shù)據(jù)庫(kù)的名稱
.setDbVersion(1)//數(shù)據(jù)庫(kù)版本號(hào)
.setDbUpgradeListener(new DbManager.DbUpgradeListener() {
@Override
public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
// TODO: ...
// db.addColumn(...);
// db.dropTable(...);
// ...
}
});//數(shù)據(jù)庫(kù)更新操作
}
}
上面的注釋明了,有必要說(shuō)明的一點(diǎn)是setDbDir(new File("/sdcard")),可以將數(shù)據(jù)庫(kù)存儲(chǔ)在你想存儲(chǔ)的地方,如果不設(shè)置,那么數(shù)據(jù)庫(kù)默認(rèn)存儲(chǔ)在/data/data/你的應(yīng)用程序/database/xxx.db下。這里我們就默認(rèn)放在應(yīng)用程序下。
我們首先創(chuàng)建一個(gè)實(shí)體類,如下:
@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;
}
}
通過(guò)實(shí)體類可以直接操作數(shù)據(jù)庫(kù)。
我們?cè)贏pplication中加入如下代碼,向數(shù)據(jù)庫(kù)添加數(shù)據(jù):
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中操作獲取數(shù)據(jù)庫(kù)數(shù)據(jù)的代碼如下:
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();
}
那么肯定會(huì)得到如下結(jié)果:

4.xUtils的網(wǎng)絡(luò)請(qǐng)求
Android規(guī)定UI線程是不能涉及網(wǎng)絡(luò)任務(wù)的,所以,這里主要簡(jiǎn)單介紹Xutils的異步網(wǎng)絡(luò)請(qǐng)求,同步的自行探究。
使用格式如下:
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移動(dòng)博客專家的HTML頁(yè)面信息,看看下面的日志,就知道Xutils網(wǎng)絡(luò)功能還是很強(qiáng)大的。

本文最后附帶了一下粗略模仿CSDN APP的源碼,有意者可以下載看看,里面用到另一個(gè)開(kāi)發(fā)框架,我用來(lái)專門(mén)處理圖片的(afinal)。都說(shuō)xUtils是afinal的進(jìn)化版,不過(guò)在圖片方面,我們覺(jué)得xUtils還有點(diǎn)不足。
http://download.csdn.net/detail/liyuanjinglyj/9379103
5..導(dǎo)入xUtils工程到Android Studio
下載地址如下:
https://github.com/wyouflf/xUtils3/tree/master
㈠將下載的工程復(fù)制到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中的版本與最低版本調(diào)整到與創(chuàng)建工程一致
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
}
其中紅色標(biāo)記為添加的代碼。
點(diǎn)擊Sync now就可以使用xUtils了。
相關(guān)閱讀:
用xutils3.0進(jìn)行下載項(xiàng)目更新
以上所述是小編給大家介紹的Android xUtils更新到3.0后的基本使用規(guī)則詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android基于開(kāi)源項(xiàng)目xutils3實(shí)現(xiàn)下載
- Android使用Xutils3進(jìn)行斷點(diǎn)下載的實(shí)例
- android ListView結(jié)合x(chóng)utils3仿微信實(shí)現(xiàn)下拉加載更多
- Android Xutils3網(wǎng)絡(luò)請(qǐng)求的封裝詳解及實(shí)例代碼
- Android使用xUtils3.0實(shí)現(xiàn)文件上傳
- Android XUtils3框架的基本使用方法(二)
- Android中XUtils3框架使用方法詳解(一)
- Android AS為xutils添加依賴過(guò)程圖解
相關(guān)文章
Android Notification.Builder通知案例分享
這篇文章主要為大家分享了Android Notification.Builder通知案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Android開(kāi)發(fā)入門(mén)之Notification用法分析
這篇文章主要介紹了Android中Notification用法,較為詳細(xì)的分析了Notification的功能、使用步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-07-07
Android 圖片特效如何實(shí)現(xiàn)及總結(jié)
這篇文章主要介紹了Android 圖形特效如何實(shí)現(xiàn)及總結(jié)的相關(guān)資料,這里對(duì)Android圖像特效的實(shí)現(xiàn)比如:旋轉(zhuǎn),放大,縮小,傾斜等,需要的朋友可以參考下2016-12-12
Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失
這篇文章主要為大家詳細(xì)介紹了Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Android中使用include標(biāo)簽和merge標(biāo)簽重復(fù)使用布局
這篇文章主要介紹了Android中使用include標(biāo)簽和merge標(biāo)簽重復(fù)使用布局,文中講解了創(chuàng)建可復(fù)用布局的例子以及include標(biāo)簽和merge標(biāo)簽使用例子,需要的朋友可以參考下2014-06-06
使用AndroidStudio上傳忽略文件至SVN Server的解決辦法
這篇文章主要介紹了使用AndroidStudio上傳忽略文件至SVN Server的解決辦法 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
Android 監(jiān)聽(tīng)屏幕是否鎖屏的實(shí)例代碼
今天小編通過(guò)本文給大家分享android如何監(jiān)聽(tīng)手機(jī)屏幕是否鎖屏。實(shí)現(xiàn)方法很簡(jiǎn)單,需要的朋友參考下吧2017-09-09
Android獲取手機(jī)位置的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Android獲取手機(jī)位置的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
淺談Android onTouchEvent 與 onInterceptTouchEvent的區(qū)別詳解
本篇文章小編為大家介紹,Android onTouchEvent 與 onInterceptTouchEvent的區(qū)別詳解。需要的朋友參考下2013-04-04

