XUtils===XUtils3框架的基本使用方法


轉載自:http://blog.csdn.NET/a1002450926/article/details/50341173

今天給大家帶來XUtils3的基本介紹,本文章的案例都是基於XUtils3的API語法進行的演示。相信大家對這個框架也都了解過,下面簡單介紹下XUtils3的一些基本知識。

XUtils3一共有4大功能:注解模塊,網絡模塊,圖片加載模塊,數據庫模塊。

使用XUtils只需要在libs文件夾里面加入一個jar包,如果對服務器返回的數據進行封裝的話,還需要導入一個Gson的jar包。

  1. <uses-permission android:name="android.permission.INTERNET" />    
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

 

注解模塊

Activity的注解
1.在Application的oncreate方法中加入下面代碼:
x.Ext.init(this);
2.在Activity的oncreate方法中加入下面代碼:
x.view().inject(this);
3.加載當前的Activity布局需要如下注解:
@ContentView加入到Activity的上方
4.給View進行初始化需要如下注解:
@InjectView
5.處理控件的各種響應事件需要如下注解:
@Envent

  1. @ContentView(R.layout.activity_main)  
  2. public class MainActivity extends ActionBarActivity {  
  3.   
  4.     @ViewInject(R.id.btn_get)  
  5.     Button btn_get;  
  6.     @ViewInject(R.id.btn_post)  
  7.     Button btn_post;  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         x.view().inject(this);  
  13.   
  14.         btn_get.setText("發送get請求");  
  15.         btn_post.setText("發送post請求");  
  16.     }  
  17.     //等同於@Event(value={R.id.btn_get,R.id.btn_post},type=View.OnClickListener.class)  
  18.     @Event(value={R.id.btn_get,R.id.btn_post})  
  19.     private void getEvent(View view){  
  20.         switch(view.getId()){  
  21.         case R.id.btn_get:  
  22.             Toast.makeText(MainActivity.this, btn_get.getText().toString().trim(), 0).show();  
  23.             break;  
  24.         case R.id.btn_post:  
  25.             Toast.makeText(MainActivity.this, btn_post.getText().toString().trim(), 0).show();  
  26.             break;  
  27.         }  
  28.     }  


通過測試,我們發現當點擊btn_get按鈕時,彈出了“發送get請求”的效果。到這里,大家算是對XUtils的注解有個一個基本的認識,下面我在強調一點的是,@Event這個注解默認情況下type屬性為View.OnClickListener.class.如果你想實現其余點擊事件效果,只需要把type值進行修改即可。
另外需要注意的一點是按鈕的點擊事件必須用private進行修飾。

Fragment的注解:

  1. @ContentView(R.layout.fragment_first)    
  2. public class FirstFragment extends Fragment{    
  3.     private MyAdapter adapter;  
  4.     private List<Person> list=new ArrayList<>();    
  5.     private List<String> listUrl=new ArrayList<>();    
  6.     private List<String> listName=new ArrayList<>();      
  7.   
  8.     @ViewInject(R.id.btn_test)  
  9.     Button btn_test;  
  10.     @ViewInject(R.id.listView)  
  11.     ListView listView;  
  12.   
  13.     @Override  
  14.     public View onCreateView(LayoutInflater inflater,  
  15.             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {  
  16.         return  x.view().inject(this, inflater, container);  
  17.     }   


ViewHolder的注解:

  1. public class MyAdapter extends  BaseAdapter{  
  2.     private Context context;  
  3.     private List<Person> list;  
  4.     private LayoutInflater mInflater;  
  5.     private ImageOptions options;  
  6.     public ViewHolder holder;  
  7.     public MyAdapter(Context context, List<Person> list) {  
  8.         this.context = context;  
  9.         this.list = list;  
  10.         this.mInflater=LayoutInflater.from(context);  
  11.         options=new ImageOptions.Builder().setLoadingDrawableId(R.drawable.ic_launcher)  
  12.                 .setLoadingDrawableId(R.drawable.ic_launcher).setUseMemCache(true).setCircular(true).build();  
  13.     }  
  14.   
  15.     @Override  
  16.     public int getCount() {  
  17.         return list.size();  
  18.     }  
  19.   
  20.     @Override  
  21.     public Object getItem(int position) {  
  22.         return list.get(position);  
  23.     }  
  24.   
  25.     @Override  
  26.     public long getItemId(int position) {  
  27.         return position;  
  28.     }  
  29.   
  30.     @Override  
  31.     public View getView(int position, View convertView, ViewGroup parent) {  
  32.         holder=null;  
  33.         if(convertView==null){  
  34.             convertView=mInflater.inflate(R.layout.itemone, null);  
  35.             holder=new ViewHolder();  
  36.             x.view().inject(holder,convertView);  
  37.             convertView.setTag(holder);  
  38.         }  
  39.         else{  
  40.             holder=(ViewHolder) convertView.getTag();  
  41.         }  
  42.         Person bean=list.get(position);  
  43.         holder.tv_name.setText(bean.getName());  
  44.         x.image().bind(holder.iv_image, bean.getImgUrl(), options);  
  45.         return convertView;  
  46.     }  
  47.   
  48.     class ViewHolder{  
  49.         @ViewInject(R.id.tv_name)  
  50.         private TextView tv_name;  
  51.         @ViewInject(R.id.iv_image)  
  52.         private ImageView iv_image;  
  53.     }  

 

上面的代碼是注解ViewHolder的標准模式,相信大家完全能夠看明白。這里我加載圖片使用到了XUtils3的加載網絡圖片的方法。后面我會詳細進行講解。

網絡模塊

XUtils的網絡請求方法和一些網絡請求框架的用法非常類似,我進行了一些簡單的封裝。
封裝一共有3個文件,分別是網絡請求工具類XUtil,請求響應數據的解析類,還有一個就是一個請求成功的一個接口回調類。
代碼如下:

  1. public class XUtil {  
  2.     /** 
  3.      * 發送get請求 
  4.      * @param <T> 
  5.      */  
  6.     public static <T> Cancelable Get(String url,Map<String,String> map,CommonCallback<T> callback){  
  7.         RequestParams params=new RequestParams(url);  
  8.         if(null!=map){  
  9.             for(Map.Entry<String, String> entry : map.entrySet()){  
  10.                 params.addQueryStringParameter(entry.getKey(), entry.getValue());  
  11.             }  
  12.         }  
  13.         Cancelable cancelable = x.http().get(params, callback);  
  14.         return cancelable;  
  15.     }  
  16.   
  17.     /** 
  18.      * 發送post請求 
  19.      * @param <T> 
  20.      */  
  21.     public static <T> Cancelable Post(String url,Map<String,Object> map,CommonCallback<T> callback){  
  22.         RequestParams params=new RequestParams(url);  
  23.         if(null!=map){  
  24.             for(Map.Entry<String, Object> entry : map.entrySet()){  
  25.                 params.addParameter(entry.getKey(), entry.getValue());  
  26.             }  
  27.         }  
  28.         Cancelable cancelable = x.http().post(params, callback);  
  29.         return cancelable;  
  30.     }  
  31.   
  32.   
  33.     /** 
  34.      * 上傳文件 
  35.      * @param <T> 
  36.      */  
  37.     public static <T> Cancelable UpLoadFile(String url,Map<String,Object> map,CommonCallback<T> callback){  
  38.         RequestParams params=new RequestParams(url);  
  39.         if(null!=map){  
  40.             for(Map.Entry<String, Object> entry : map.entrySet()){  
  41.                 params.addParameter(entry.getKey(), entry.getValue());  
  42.             }  
  43.         }  
  44.         params.setMultipart(true);  
  45.         Cancelable cancelable = x.http().get(params, callback);  
  46.         return cancelable;  
  47.     }  
  48.   
  49.     /** 
  50.      * 下載文件 
  51.      * @param <T> 
  52.      */  
  53.     public static <T> Cancelable DownLoadFile(String url,String filepath,CommonCallback<T> callback){  
  54.         RequestParams params=new RequestParams(url);  
  55.         //設置斷點續傳  
  56.         params.setAutoResume(true);  
  57.         params.setSaveFilePath(filepath);  
  58.         Cancelable cancelable = x.http().get(params, callback);  
  59.         return cancelable;  
  60.     }  
  61. }  
  62.   
  63.   
  64. public class JsonResponseParser implements ResponseParser {  
  65.     //檢查服務器返回的響應頭信息  
  66.     @Override  
  67.     public void checkResponse(UriRequest request) throws Throwable {  
  68.     }  
  69.   
  70.     /** 
  71.      * 轉換result為resultType類型的對象 
  72.      * 
  73.      * @param resultType  返回值類型(可能帶有泛型信息) 
  74.      * @param resultClass 返回值類型 
  75.      * @param result      字符串數據 
  76.      * @return 
  77.      * @throws Throwable 
  78.      */  
  79.     @Override  
  80.     public Object parse(Type resultType, Class<?> resultClass, String result) throws Throwable {  
  81.         return new Gson().fromJson(result, resultClass);  
  82.     }  
  83. }  
  84.   
  85.   
  86. public class MyCallBack<ResultType> implements Callback.CommonCallback<ResultType>{  
  87.   
  88.     @Override  
  89.     public void onSuccess(ResultType result) {  
  90.         //可以根據公司的需求進行統一的請求成功的邏輯處理  
  91.     }  
  92.   
  93.     @Override  
  94.     public void onError(Throwable ex, boolean isOnCallback) {  
  95.         //可以根據公司的需求進行統一的請求網絡失敗的邏輯處理  
  96.     }  
  97.   
  98.     @Override  
  99.     public void onCancelled(CancelledException cex) {  
  100.   
  101.     }  
  102.   
  103.     @Override  
  104.     public void onFinished() {  
  105.   
  106.     }  
  107.   
  108.   
  109. }  

1.發送get請求示例:

  1. //本get請求來自於免費測試接口:http://www.k780.com/api/entry.baidu  
  2. String url="http://api.k780.com:88/?app=idcard.get";  
  3.         Map<String,String> map=new HashMap<>();  
  4.         map.put("appkey", "10003");  
  5.         map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4");  
  6.         map.put("format", "json");  
  7.         map.put("idcard", "110101199001011114");  
  8.         XUtil.Get(url, map, new MyCallBack<PersonInfoBean>(){  
  9.   
  10.             @Override  
  11.             public void onSuccess(PersonInfoBean result) {  
  12.                 super.onSuccess(result);  
  13.                 Log.e("result", result.toString());  
  14.             }  
  15.   
  16.             @Override  
  17.             public void onError(Throwable ex, boolean isOnCallback) {  
  18.                 super.onError(ex, isOnCallback);  
  19.   
  20.   
  21.             }  
  22.   
  23.         });  

 

2.發送post請求

  1. String url="http://api.k780.com:88/?app=idcard.get";  
  2.         Map<String,Object> map=new HashMap<>();  
  3.         map.put("appkey", "10003");  
  4.         map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4");  
  5.         map.put("format", "json");  
  6.         map.put("idcard", "110101199001011114");  
  7.         XUtil.Post(url, map, new MyCallBack<PersonInfoBean>(){  
  8.   
  9.             @Override  
  10.             public void onSuccess(PersonInfoBean result) {  
  11.                 super.onSuccess(result);  
  12.                 Log.e("result", result.toString());  
  13.             }  
  14.   
  15.             @Override  
  16.             public void onError(Throwable ex, boolean isOnCallback) {  
  17.                 super.onError(ex, isOnCallback);  
  18.   
  19.             }  
  20.         });  


3.上傳文件

  1. /** 
  2.      * 上傳文件(支持多文件上傳) 
  3.      */  
  4.     private void uploadfile() {  
  5.         //圖片上傳地址  
  6.         String url="";  
  7.         Map<String,Object> map=new HashMap<>();  
  8.         //傳入自己的相應參數  
  9.         //map.put(key, value);  
  10.         //map.put(key, value);  
  11.         XUtil.UpLoadFile(url, map, new MyCallBack<String>(){  
  12.   
  13.             @Override  
  14.             public void onSuccess(String result) {  
  15.                 super.onSuccess(result);  
  16.             }  
  17.   
  18.             @Override  
  19.             public void onError(Throwable ex, boolean isOnCallback) {  
  20.                 super.onError(ex, isOnCallback);  
  21.             }  
  22.   
  23.         });  
  24.   
  25.     }  


4.下載文件

  1. private void downloadfile() {  
  2.         //文件下載地址  
  3.         String url="";  
  4.         //文件保存在本地的路徑  
  5.         String filepath="";  
  6.         XUtil.DownLoadFile(url, filepath,new MyCallBack<File>(){  
  7.             @Override  
  8.             public void onSuccess(File result) {  
  9.                 super.onSuccess(result);  
  10.   
  11.             }  
  12.   
  13.             @Override  
  14.             public void onError(Throwable ex, boolean isOnCallback) {  
  15.                 super.onError(ex, isOnCallback);  
  16.   
  17.             }  
  18.         });  


5.下載文件帶進度條

  1. private void downloadprogressfile() {  
  2.         //文件下載地址  
  3.         String url="";  
  4.         //文件保存在本地的路徑  
  5.         String filepath="";  
  6.         XUtil.DownLoadFile(url, filepath,new MyProgressCallBack<File>(){  
  7.   
  8.             @Override  
  9.             public void onSuccess(File result) {  
  10.                 super.onSuccess(result);  
  11.   
  12.             }  
  13.   
  14.             @Override  
  15.             public void onError(Throwable ex, boolean isOnCallback) {  
  16.                 super.onError(ex, isOnCallback);  
  17.   
  18.             }  
  19.             @Override  
  20.             public void onLoading(long total, long current,  
  21.                     boolean isDownloading) {  
  22.                 super.onLoading(total, current, isDownloading);  
  23.   
  24.             }  
  25.         });  
  26.     }  


6.發送get請求(服務器以xml格式返回)

  1. private void getxml() {  
  2.         String url="http://flash.weather.com.cn/wmaps/xml/china.xml";  
  3.         XUtil.Get(url, null, new MyCallBack<String>(){  
  4.   
  5.             @Override  
  6.             public void onSuccess(String xmlString) {  
  7.                 super.onSuccess(xmlString);  
  8.                 try{  
  9.                     XmlPullParserFactory factory = XmlPullParserFactory.newInstance();    
  10.                     XmlPullParser xmlPullParser = factory.newPullParser();    
  11.                     xmlPullParser.setInput(new StringReader(xmlString));    
  12.                     int eventType = xmlPullParser.getEventType();    
  13.                     while (eventType != XmlPullParser.END_DOCUMENT) {    
  14.                         switch (eventType) {    
  15.                         case XmlPullParser.START_TAG:    
  16.                             String nodeName = xmlPullParser.getName();    
  17.                             if ("city".equals(nodeName)) {    
  18.                                 String pName = xmlPullParser.getAttributeValue(0);    
  19.                                 Log.e("TAG", "city is " + pName);    
  20.                             }    
  21.                             break;    
  22.                         }    
  23.                         eventType = xmlPullParser.next();    
  24.                     }    
  25.                 }catch(Exception e){  
  26.                     e.printStackTrace();  
  27.                 }  
  28.             }  
  29.   
  30.             @Override  
  31.             public void onError(Throwable ex, boolean isOnCallback) {  
  32.                 super.onError(ex, isOnCallback);  
  33.             }  
  34.   
  35.         });  
  36.     }  

 

圖片加載模塊

用法:

  1. x.image().bind(imageView, url, imageOptions);  
  2. x.image().bind(imageView, "file:///sdcard/test.gif", imageOptions);  
  3. x.image().bind(imageView, "assets://test.gif", imageOptions);  
  4. x.image().bind(imageView, url, imageOptions, new Callback.CommonCallback<Drawable>() {...});  
  5. x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});  
  6. x.image().loadFile(url, imageOptions, new Callback.CommonCallback<File>() {...});  


Xutils3的api還是比較簡單的,相信大家都可以看懂,第一個參數傳入一個View,第二個參數傳入一個圖片的網絡地址,第三個參數一般是加載圖片的配置。
下面看一下ImageOptions這個類吧:

  1. ImageOptions options=new ImageOptions.Builder()  
  2. //設置加載過程中的圖片  
  3. .setLoadingDrawableId(R.drawable.ic_launcher)  
  4. //設置加載失敗后的圖片  
  5. .setFailureDrawableId(R.drawable.ic_launcher)  
  6. //設置使用緩存  
  7. .setUseMemCache(true)  
  8. //設置顯示圓形圖片  
  9. .setCircular(true)  
  10. //設置支持gif  
  11. .setIgnoreGif(false)  
  12. .build();  

 

其余的一些配置請參考源碼

如果需要對加載的圖片進行操作的話,可以使用:

x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});

 

通過返回的Drawable對象進行圖片的處理,滿足項目的個性化的要求.

說了這么多,我想大家至少會對XUtils3有了一個基本的了解,由於XUtils3的數據庫的用法比較多,本篇文章不會去涉及,下一篇文章我會為大家詳細講解XUtils3的數據庫模塊。大家趕緊現在動手操作一下吧!本文涉及到的所有實例都會在下面的demo中有涉及到,請自行參考。

源碼下載地址:http://download.csdn.net/detail/a1002450926/9364413


免責聲明!

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



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