zoukankan      html  css  js  c++  java
  • 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, nullnew 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
  • 相关阅读:
    Android Developer API Guides
    Ubuntu 12.04 下安装 VirtualBox
    C++的异常处理
    JZOJ 4246. 【五校联考6day2】san
    JZOJ 4245. 【五校联考6day2】er
    JZOJ 4244. 【五校联考6day2】yi
    JZOJ 4228. 【五校联考3day2】C
    JZOJ 4227. 【五校联考3day2】B
    JZOJ 4226. 【五校联考3day2】A
    JZOJ 4235. 序列
  • 原文地址:https://www.cnblogs.com/miaozhenzhong/p/5930921.html
Copyright © 2011-2022 走看看