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)關於注解:

  代碼中以@開頭的內容就是注解
  注解的類型:源代碼注解、編譯時注解、運行時注解
  注解應用的方式:類、方法、成員變量、參數
  注解的使用:注解的引用、注解的參數、注解的聲明
 
(2)常見注解:
  @Override
  代表方法是重寫了父類的方法
  @Deprecated
  代表修飾的內容已經過時了
  @SuppressWarnings
  代表忽略特定的代碼檢查
 
(3)注解類型
  源代碼級別的注解:存在於源代碼中,但不會進行編譯操作,也就是不會出現在類文件中
  類文件級別(編譯時)的注解:存在於類文件中,但不會被JVM加載
  運行級別的注解:JVM運行時,會加載到JVM中
 
(4)注解的創建
  1、創建.java的文件;選擇Annotation。
  2、創建出的注解代碼以@interface作為標示,就像class一樣。
  3、指定注解能夠應用在哪些范圍上,例如:類、方法、成員變量、參數當中的哪些部分。
     給注解指定@Target注解。
 
(5)注解的屬性和參數
  1.注解中指定的屬性和參數,是需要在源代碼開發的時候指定的,永遠不會變。
  2.因為代碼中的注解,在編譯之后,固化在class文件里了。
  3.通過反射,可以獲取成員變量的注解信息,以及獲取注解的參數。
 
 
2、ViewUtils的使用
 
(1)ViewUtils.inject(); 
語句的注入  
  用途:用於加載當前類中所有相關的注解
 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視圖注解的應用

  注解描述信息,ViewUtils.inject()動態加載、分析注解
  1、描述:setContentView @ContentView(R.layout.xxx)
  2、描述:findViewById @ViewInject(R.id.xxx)
  3、描述事件監聽器:@OnClick(R.id.xxx) .....
  4、描述各種資源:@ResInject(id=R.xx.xx,type=ResTypes.XXX)

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 }
bean實體類
數據庫實體定義
利用@Table定義數據庫實體對應的表
利用@Id標識主鍵
利用@Column標記數據庫表的列字段
利用@Finder查找多個實體關系

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 更新進度條
 } } ); }

 

HttpUtils的特點:
1.支持文件上傳,Volley不支持;
2.支持文件下載,上傳下載,支持進度,Volley不支持;
3.使用HttpClient,在Android5.0已經不在內置HttpCleint,使用Gradle開發,針對Android5.0之后,就需要添加一個過時包才可以繼續使用;
4.使用異步任務,速度比Volley要慢。

-------------------------------------------------------------------------------------------------------------------

關於開源代碼作者

  • Email: wyouflf@qq.comwyouflf@gmail.com
  • 有任何建議或者使用中遇到問題都可以給我發郵件, 你也可以加入QQ群:330445659(已滿), 275967695, 257323060,技術交流,idea分享 _


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM