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

posted @ 2016-10-18 21:46  夏冬青  阅读(1858)  评论(0编辑  收藏  举报