xUtils類庫的使用
序言:
作為一個職業的程式猿,不會像新手一樣把每一個需要實現的功能每次重寫一遍,因為程式猿能熟練的使用各種第三方類庫。
畢竟人類因為會使用工具才站到了食物鏈頂端。
現在就讓我們學習使用xUtils類庫 中的四個工具類
開原始碼來自於:https://github.com/wyouflf/xUtils
-------------------------------------------------------------------------------------------------------------------
xUtils簡介
- xUtils 包含了很多實用的android工具。
- xUtils 支援大檔案上傳,更全面的http請求協議支援(10種謂詞),擁有更加靈活的ORM,更多的事件註解支援且不受混淆影響...
- xUitls 最低相容android 2.2 (api level 8)
xUtils許可權:
1、聯網許可權
2、外部儲存寫入許可權
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
--------------------------------------------------------------------------------------------------------------------
一、BitmapUtils 影像工具類
功能:
載入bitmap的時候無需考慮bitmap載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象;
支援載入網路圖片和本地圖片;
記憶體管理使用lru演算法,更好的管理bitmap記憶體;
可配置執行緒載入執行緒數量,快取大小,快取路徑,載入顯示動畫等...
載入圖片
1 BitmapUtils bitmapUtils = new BitmapUtils(this);
2
3 // 載入網路圖片 第一個引數:如果是ImageView控制元件,則顯示圖片,否則顯示為背景,第二個引數圖片網路地址
4 bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png");
5
6 // 載入本地圖片(路徑以/開頭, 絕對路徑)
7 bitmapUtils.display(testImageView, "/sdcard/test.jpg");
8
9 // 載入assets中的圖片(路徑以assets開頭)
10 bitmapUtils.display(testImageView, "assets/img/wallpaper.jpg");
載入網路圖片時
bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png");
對應display()方法 還有一個三個引數的方法
前兩個引數不變,第三個引數為BitmapDisplayConfig物件,用於設定圖片的配置
eg:
1 BitmapDisplayConfig displayConfig = new BitmapDisplayConfig();
2 displayConfig.setLoadFailedDrawable(Drawable)
3 設定載入失敗的圖片
4 displayConfig.setLoadingDrawable(Drawable)
5 設定載入中的圖片
6 displayConfig.setAutoRotation(boolean)
7 有些JPEG圖片,圖片自身需要旋轉才可以正常顯示的情況,
8 來進行設定是否自動支援旋轉
9 displayConfig.setAnimation(Animation)
10 用於實現要載入的View的顯示動畫,可用於ListView中
1 BitmapDisplayConfig displayConfig = new BitmapDisplayConfig();
2 //設定載入中的圖片
3 Resources resources = getResources();
4 displayConfig.setLoadingDrawable(resources.getDrawable(R.drawable.ic_launcher));
5 //設定載入失敗的圖片
6 displayConfig.setLoadFailedDrawable(resources.getDrawable(android.R.drawable.ic_delete));
7 //設定Bitmap畫素的配置
8 displayConfig.setBitmapConfig(Bitmap.Config.ARGB_8888);
9 //設定記憶體中Bitmap最大的畫素尺寸,減少記憶體佔用
10 BitmapSize size = new BitmapSize(100,50);
11 displayConfig.setBitmapMaxSize(size);
12 //設定圖片載入成功之後 到最終圖片顯示完成之間的動畫效果
13 displayConfig.setAnimation(animation);
14
15 bitmapUtils.display(imageView, url,displayConfig);
BitmapUtils預設配置設定
以上的使用可以看出每當我們要載入一個圖片的時候,都需要設定該圖片的一些配置
而xUtils給我們提供了預設設定,即只要設定屬性一次即可
使用方法為:使用BitmapUtils 的 configDefaultXxxx()格式的方法
eg. 設定預設配置,載入三個網路圖片,則該三個圖片的屬性是一樣的
BitmapUtils bitmapUtils = new BitmapUtils(this);
//設定預設的載入中的圖片
bitmapUtils.configDefaultLoadingImage(R.drawable.ic_launcher);
//設定預設的載入失敗的圖片
bitmapUtils.configDefaultLoadFailedImage(android.R.drawable.ic_delete);
//設定預設的圖片尺寸
bitmapUtils.configDefaultBitmapMaxSize(new BitmapSize(100,50));
//設定預設的載入超時時間
bitmapUtils.configDefaultConnectTimeout(2000);
//載入第一張圖片
bitmapUtils.display(imageView1, url_1);
//載入第二張圖片
bitmapUtils.display(imageView2, url_2);
//載入第三張圖片
bitmapUtils.display(imageView3, url_3);
--------------------------------------------------------------------------------------------------------------------
二、ViewUtils檢視相關工具類
功能:
- android中的ioc框架,完全註解方式就可以進行UI,資源和事件繫結;
- 新的事件繫結方式,使用混淆工具混淆後仍可正常工作;
- 目前支援常用的20種事件繫結,參見ViewCommonEventListener類和包com.lidroid.xutils.view.annotation.event
1、註解
(1)關於註解:
1 //在Activity中注入:
2 @Override
3 public void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5 setContentView(R.layout.main);
6 ViewUtils.inject(this); //注入view和事件
7 ...
8 textView.setText("some text...");
9 ...
10 }
11 //在Fragment中注入:
12 @Override
13 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
14 View view = inflater.inflate(R.layout.bitmap_fragment, container, false); // 載入fragment佈局
15 ViewUtils.inject(this, view); //注入view和事件
16 ...
17 }
18 //在PreferenceFragment中注入:
19 public void onActivityCreated(Bundle savedInstanceState) {
20 super.onActivityCreated(savedInstanceState);
21 ViewUtils.inject(this, getPreferenceScreen()); //注入view和事件
22 ...
23 }
(2)xUtils檢視註解的應用
eg:
// xUtils的view註解要求必須提供id,以使程式碼混淆不受影響。
@ViewInject(R.id.textView)
TextView textView;
@ResInject(id = R.string.label, type = ResType.String)
private String label;
// 取消了之前使用方法名繫結事件的方式,使用id繫結不受混淆影響
// 支援繫結多個id @OnClick({R.id.id1, R.id.id2, R.id.id3})
// or @OnClick(value={R.id.id1, R.id.id2, R.id.id3}, parentId={R.id.pid1, R.id.pid2, R.id.pid3})
// 更多事件支援參見ViewCommonEventListener類和包com.lidroid.xutils.view.annotation.event。
@OnClick(R.id.test_button)
public void testButtonClick(View v) { // 方法簽名必須和介面中的要求一致
...
}
--------------------------------------------------------------------------------------------------------------------
三、DbUtils 資料庫相關工具類
功能:
- android中的orm框架,一行程式碼就可以進行增刪改查;
- 支援事務,預設關閉;
- 可通過註解自定義表名,列名,外來鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時候請註解表名和列名);
- 支援繫結外來鍵,儲存實體時外來鍵關聯實體自動儲存或更新;
- 自動載入外來鍵關聯實體,支援延時載入;
- 支援鏈式表達查詢,更直觀的查詢語義,參考下面的介紹或sample中的例子。
使用步驟:
1、編寫實體類
1 package com.xqxapp.finance.bean;
2
3 import android.graphics.Bitmap;
4 import com.lidroid.xutils.db.annotation.Column;
5 import com.lidroid.xutils.db.annotation.Id;
6 import com.lidroid.xutils.db.annotation.Table;
7
8 /**
9 * Created
10 * Author: xqx
11 * Date: 15-10-9
12 */
13 @Table(name = "account")
14 public class Account {
15
16 @Id
17 private long _id;
18 @Column
19 private int money_type; //型別:支出/收入
20 @Column
21 private float money; //金額
22 @Column
23 private String type; //支出用途/收入來源
24 @Column
25 private String way; //金額型別:現金 支付寶。。。
26 @Column
27 private String remarks; //備註
28 @Column
29 private String time; //時間
30 @Column
31 private String people; //群體
32
33
34 private Bitmap image; //存單
35
36
37 public long getId() {
38 return _id;
39 }
40
41 public void setId(long id) {
42 this._id = id;
43 }
44
45 public int getMoney_type() {
46 return money_type;
47 }
48
49 public void setMoney_type(int money_type) {
50 this.money_type = money_type;
51 }
52
53 public float getMoney() {
54 return money;
55 }
56
57 public void setMoney(float money) {
58 this.money = money;
59 }
60
61 public String getType() {
62 return type;
63 }
64
65 public void setType(String type) {
66 this.type = type;
67 }
68
69 public String getWay() {
70 return way;
71 }
72
73 public void setWay(String way) {
74 this.way = way;
75 }
76
77 public String getRemarks() {
78 return remarks;
79 }
80
81 public void setRemarks(String remarks) {
82 this.remarks = remarks;
83 }
84
85 public String getTime() {
86 return time;
87 }
88
89 public void setTime(String time) {
90 this.time = time;
91 }
92
93 public String getPeople() {
94 return people;
95 }
96
97 public void setPeople(String people) {
98 this.people = people;
99 }
100
101 public Bitmap getImage() {
102 return image;
103 }
104
105 public void setImage(Bitmap image) {
106 this.image = image;
107 }
108 }
2、DbUtils的建立
1 DbUtils.create(this,app.db);
引數一:上下文 引數二:資料檔名
3、新增記錄
Account account = new Account();
account.setMoney(Float.parseFloat(et_money.getText().toString()));
account.setMoney_type(MONEY_TYPE);
account.setPeople("");
account.setRemarks("");
account.setTime(time.getText().toString());
account.setType("");
account.setWay(way.getText().toString());
DbUtils.save(account)
--------------------------------------------------------------------------------------------------------------------
四、HttpUtils 網路相關工具類
功能:
- 支援同步,非同步方式的請求;
- 支援大檔案上傳,上傳大檔案不會oom;
- 支援GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請求;
- 下載支援301/302重定向,支援設定是否根據Content-Disposition重新命名下載的檔案;
- 返回文字內容的請求(預設只啟用了GET請求)支援快取,可設定預設過期時間和針對當前請求的過期時間。
1、Get非同步請求數 HttpUtils httpUtils = new HttpUtils(5000,"xxx[Android]");
//第一個引數,連線超時時間 ,第二個引數 userAgent 客戶端標識,可以隨便寫
//2、聯網
httpUtils.send(HttpRequest.HttpMethod.GET,
"http://www.baidu.com",
new RequestCallBack<String>() {
//請求成功時回撥
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
// 請求資料成功後的操作
}
//請求失敗時回撥
@Override
public void onFailure(HttpException e, String s) {
//請求資料失敗後的操作
}
});
2、Get 同步請求資料
try {
ResponseStream responseStream = httpUtils.sendSync(HttpRequest.HttpMethod.GET, "http://www.163.com"
);
int statusCode = responseStream.getStatusCode();
if(statusCode==200){
//進行資料的操作
}
}
responseStream.close();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
3、Post 上傳
HttpUtils httpUtils = new HttpUtils(5000);
//POST請求的引數準備
//按引數提交資料
//引數的提交需要指定編碼:也就是new RequestParams("字元編碼");
//伺服器 需要什麼編碼,客戶端就要設定對應的編碼
// 指定字元編碼
RequestParams params = new RequestParams("UTF-8");
//1、設定引數 POST 內容 //在網址之後自動加入http://11.1.163.24:8080/post?a=123
params.addQueryStringParameter("a","123");
//POST 請求大部分都需要BodyParameter
params.addBodyParameter("name","admin");
params.addBodyParameter("password", "123456");
//1.1 如果需要附加http頭欄位 ,
params.addHeader("User-Agent","Zhang Sir");
httpUtils.send(
HttpRequest.HttpMethod.POST, //post方式
"http://11.1.163.24:8080/post", //網址介面
params,
new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
txtInfo.setText(responseInfo.result);
}
@Override
public void onFailure(HttpException e, String s) {
txtInfo.setText("請求失敗");
}
}
);
4、下載
HttpUtils httpUtils = new HttpUtils(5000);
//1、下載檔案
//獲取儲存卡路徑
String state = Environment.getExternalStorageState();
//判斷是否掛載成功
if(Environment.MEDIA_MOUNTED.equals(state)) {
File root = Environment.getExternalStorageDirectory();
//目標檔案物件
File targetFile = new File(root,"xmly1.apk");
//進行檔案的下載
HttpHandler<File> download = httpUtils.download("http://11.1.163.24:8080/ximalayatingshu_64.apk",
targetFile.getAbsolutePath(), //儲存路徑
true, //autoResume 是否斷點續傳,false 則可以重新命名下載,true 則下載成功的不再下載,執行下載失敗介面回撥
true, //autoRename 自動重新命名
new RequestCallBack<File>() { //回撥
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
//返回下載成功的File物件
Toast.makeText(getApplicationContext(), "success", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(HttpException e, String s) {
Toast.makeText(getApplicationContext(), "failure", Toast.LENGTH_SHORT).show();
}
/**
* 當前網路請求:上傳下載的進度的更新回撥
* @param total 總長度
* @param current 當前進度
* @param isUploading 是否上傳 true上傳 false 下載
*/
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
//TODO 更新進度條
}
}
);
}
-------------------------------------------------------------------------------------------------------------------
關於開原始碼作者
- Email: wyouflf@qq.com, wyouflf@gmail.com
- 有任何建議或者使用中遇到問題都可以給我發郵件, 你也可以加入QQ群:330445659(已滿), 275967695, 257323060,技術交流,idea分享 _
相關文章
- xUtils框架框架
- xutils3資料庫升級(markdown版)S3資料庫
- 使用類庫
- .NET Standard 類庫的使用技巧
- 使用Reflexil修改類庫Flex
- Android orm 框架xUtils簡介AndroidORM框架
- 使用RxJava代替EventBus類庫RxJava
- xutils android studio引用問題Android
- XGBoost類庫使用小結
- Django資料庫類庫MySQLdb使用詳解Django資料庫MySql
- .Net程式設計師安卓學習之路4:使用xutils Get Post資料程式設計師安卓
- 使用了Buzz庫的HttpClient類來設定代理HTTPclient
- 使用WordPress中的wpdb類運算元據庫
- 在Laravel中使用自己的類庫三種方式Laravel
- 【資料庫使用-oracle索引的建立和分類】二資料庫Oracle索引
- 【資料庫使用-oracle索引的建立和分類】一資料庫Oracle索引
- Java使用QRGen類庫生成二維碼Java
- dede資料庫類使用方法 $dsql資料庫SQL
- jCharts:Java圖表類庫使用介紹Java
- ASIHTTPRequest類庫簡介和使用說明HTTP
- vb.net 類庫中如何使用webserviceWeb
- .Net程式設計師安卓學習之路5:使用xutils注入View和事件以及圖片的顯示程式設計師安卓View事件
- golang開發:類庫篇(二) Redis連線池的使用GolangRedis
- 初次使用CxImage類庫、VC6配置UNICODE的方法Unicode
- 使用Mongoose類庫實現簡單的增刪改查Go
- scikit-learn Adaboost類庫使用小結
- Google Guava 使用者指南 —- 初始Guava類庫GoGuava
- Python pymodbus類庫使用學習總結Python
- Python pycryptodome類庫使用學習總結Python
- Random 類的使用random
- File類的使用
- Java庫中的LocalDate類JavaLDA
- 用託管類庫的方式在C#中使用C++編寫的類(設計流程)C#C++
- 關於Moment.js(JavaScript 日期處理類庫)的使用JSJavaScript
- Android Http請求框架二:xUtils 框架網路請求AndroidHTTP框架
- javascript類庫JavaScript
- 使用C++/CLI呼叫C#封裝類庫C++C#封裝
- .Net解析html文件類庫HtmlAgilityPack完整使用說明HTML