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

编程之家收集整理的这篇文章主要介绍了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,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, entry.getValue());  
  38.             }  
  39.         }  
  40.         params.setMultipart(true);  
  41.         Cancelable cancelable = x.http().get(params, callback);  
  42.         return cancelable;  
  43.     }  
  44.   
  45.     /** 
  46.      * 下载文件 
  47.      * @param <T> 
  48.      */  
  49.     public static <T> Cancelable DownLoadFile(String url,String filepath,CommonCallback<T> callback){  
  50.         RequestParams params=new RequestParams(url);  
  51.         //设置断点续传  
  52.         params.setAutoResume(true);  
  53.         params.setSaveFilePath(filepath);  
  54.         Cancelable cancelable = x.http().get(params, callback);  
  55.         return cancelable;  
  56.     }  
  57. }  
  58.   
  59.   
  60. public class JsonResponseParser implements ResponseParser {  
  61.     //检查服务器返回的响应头信息  
  62.     @Override  
  63.     public void checkResponse(UriRequest request) throws Throwable {  
  64.     }  
  65.   
  66.     /** 
  67.      * 转换result为resultType类型的对象 
  68.      * 
  69.      * @param resultType  返回值类型(可能带有泛型信息) 
  70.      * @param resultClass 返回值类型 
  71.      * @param result      字符串数据 
  72.      * @return 
  73.      * @throws Throwable 
  74.      */  
  75.     @Override  
  76.     public Object parse(Type resultType, Class<?> resultClass, String result) throws Throwable {  
  77.         return new Gson().fromJson(result, resultClass);  
  78.     }  
  79. }  
  80.   
  81.   
  82. public class MyCallBack<ResultType> implements Callback.CommonCallback<ResultType>{  
  83.   
  84.     @Override  
  85.     public void onSuccess(ResultType result) {  
  86.         //可以根据公司的需求进行统一的请求成功的逻辑处理  
  87.     }  
  88.   
  89.     @Override  
  90.     public void onError(Throwable ex, boolean isOnCallback) {  
  91.         //可以根据公司的需求进行统一的请求网络失败的逻辑处理  
  92.     }  
  93.   
  94.     @Override  
  95.     public void onCancelled(CancelledException cex) {  
  96.   
  97.     }  
  98.   
  99.     @Override  
  100.     public void onFinished() {  
  101.   
  102.     }  
  103.   
  104.   
  105. }  

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, 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, 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, isOnCallback);  
  20.             }  
  21.   
  22.         });  
  23.   
  24.     }  


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, isOnCallback);  
  15.   
  16.             }  
  17.         });  


5.下载文件带进度条

  1. private void downloadprogressfile() {  
  2.         //文件下载地址  
  3.         String url="";  
  4.         //文件保存在本地的路径  
  5.         String filepath="";  
  6.         XUtil.DownLoadFile(url,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, isOnCallback);  
  16.   
  17.             }  
  18.             @Override  
  19.             public void onLoading(long total, long current,  
  20.                     boolean isDownloading) {  
  21.                 super.onLoading(total, current, isDownloading);  
  22.   
  23.             }  
  24.         });  
  25.     }  


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, isOnCallback);  
  32.             }  
  33.   
  34.         });  
  35.     }  

 

图片加载模块

用法:

  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, imageOptions, new Callback.CommonCallback<Drawable>() {...});  
  5. x.image().loadDrawable(url, new Callback.CommonCallback<Drawable>() {...});  
  6. x.image().loadFile(url, 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

总结

以上是编程之家为你收集整理的XUtils===XUtils3框架的基本使用方法全部内容,希望文章能够帮你解决XUtils===XUtils3框架的基本使用方法所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群:1065694478(已满)
编程之家官方2群:163560250(已满)
编程之家官方3群:312128206(已满)
编程之家官方4群:230427597

相关文章

猜你在找的Android相关文章

转载自:http://blog.csdn.NET/a1002450926/article/details/50341173 今天给大家带来XUtils3的基本介绍,本文章的案例都是基于XUtils3的
Android APP在初次使用的时候往往会出现APP的首页标志,然后几秒之后进入导航页,今天就记录一下,首页的延时跳转的两种方法: 第一种使用Handler延时跳转,在onCreate的方法中加入一
摘要:&#160;本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索Java语言选择「Best M... 本项目主要对目前
在ExpandableListView中添加button后item项不能点击,获取不到点击事件。 原因:button按钮抢占了ExpandableListView的焦点
Android页面跳转和数据回传 今天我尝试用两个页面实现数据的传递和回传,出现了一些问题,把问题已经成功的案例总结如下: 具体是这样的: 有两个layout布局,两个activity。MainAct
现在是2021-03-12 00::39 刚刚完成了一个小软件部分功能,现在把出现的问题总结如下: 一、首先要下载jar包 网址:https://mvnrepository.com/artifact/
用到的jxl2.6.12 jar&#160;包下载地址: https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl/2.6.12
首先要使用ListView是要自定义一个适配器类的,先简单分析一下适配器怎么写: 示例程序是要使用ListView列表显示出水果的图片以及对应的水果文字描述(水果名字)。 public class F