`
苗振忠
  • 浏览: 59510 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

转载自:http://blog.csdn.net/a1002450926/article/details/50341173

今天给大家带来XUtils3的基本介绍,本文章的案例都是基于XUtils3的API语法进行的演示。相信大家对这个框架也都了解过,下面简单介绍下XUtils3的一些基本知识。

XUtils3一共有4大功能:注解模块,网络模块,图片加载模块,数据库模块。

使用XUtils只需要在libs文件夹里面加入一个jar包,如果对服务器返回的数据进行封装的话,还需要导入一个Gson的jar包。

  1. <uses-permissionandroid:name="android.permission.INTERNET"/>
  2. <uses-permissionandroid: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. publicclassMainActivityextendsActionBarActivity{
  3. @ViewInject(R.id.btn_get)
  4. Buttonbtn_get;
  5. @ViewInject(R.id.btn_post)
  6. Buttonbtn_post;
  7. @Override
  8. protectedvoidonCreate(BundlesavedInstanceState){
  9. super.onCreate(savedInstanceState);
  10. x.view().inject(this);
  11. btn_get.setText("发送get请求");
  12. btn_post.setText("发送post请求");
  13. }
  14. //等同于@Event(value={R.id.btn_get,R.id.btn_post},type=View.OnClickListener.class)
  15. @Event(value={R.id.btn_get,R.id.btn_post})
  16. privatevoidgetEvent(Viewview){
  17. switch(view.getId()){
  18. caseR.id.btn_get:
  19. Toast.makeText(MainActivity.this,btn_get.getText().toString().trim(),0).show();
  20. break;
  21. caseR.id.btn_post:
  22. Toast.makeText(MainActivity.this,btn_post.getText().toString().trim(),0).show();
  23. break;
  24. }
  25. }

通过测试,我们发现当点击btn_get按钮时,弹出了“发送get请求”的效果。到这里,大家算是对XUtils的注解有个一个基本的认识,下面我在强调一点的是,@Event这个注解默认情况下type属性为View.OnClickListener.class.如果你想实现其余点击事件效果,只需要把type值进行修改即可。
另外需要注意的一点是按钮的点击事件必须用private进行修饰。

Fragment的注解:

  1. @ContentView(R.layout.fragment_first)
  2. publicclassFirstFragmentextendsFragment{
  3. privateMyAdapteradapter;
  4. privateList<Person>list=newArrayList<>();
  5. privateList<String>listUrl=newArrayList<>();
  6. privateList<String>listName=newArrayList<>();
  7. @ViewInject(R.id.btn_test)
  8. Buttonbtn_test;
  9. @ViewInject(R.id.listView)
  10. ListViewlistView;
  11. @Override
  12. publicViewonCreateView(LayoutInflaterinflater,
  13. @NullableViewGroupcontainer,@NullableBundlesavedInstanceState){
  14. returnx.view().inject(this,inflater,container);
  15. }

ViewHolder的注解:
  1. publicclassMyAdapterextendsBaseAdapter{
  2. privateContextcontext;
  3. privateList<Person>list;
  4. privateLayoutInflatermInflater;
  5. privateImageOptionsoptions;
  6. publicViewHolderholder;
  7. publicMyAdapter(Contextcontext,List<Person>list){
  8. this.context=context;
  9. this.list=list;
  10. this.mInflater=LayoutInflater.from(context);
  11. options=newImageOptions.Builder().setLoadingDrawableId(R.drawable.ic_launcher)
  12. .setLoadingDrawableId(R.drawable.ic_launcher).setUseMemCache(true).setCircular(true).build();
  13. }
  14. @Override
  15. publicintgetCount(){
  16. returnlist.size();
  17. }
  18. @Override
  19. publicObjectgetItem(intposition){
  20. returnlist.get(position);
  21. }
  22. @Override
  23. publiclonggetItemId(intposition){
  24. returnposition;
  25. }
  26. @Override
  27. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  28. holder=null;
  29. if(convertView==null){
  30. convertView=mInflater.inflate(R.layout.itemone,null);
  31. holder=newViewHolder();
  32. x.view().inject(holder,convertView);
  33. convertView.setTag(holder);
  34. }
  35. else{
  36. holder=(ViewHolder)convertView.getTag();
  37. }
  38. Personbean=list.get(position);
  39. holder.tv_name.setText(bean.getName());
  40. x.image().bind(holder.iv_image,bean.getImgUrl(),options);
  41. returnconvertView;
  42. }
  43. classViewHolder{
  44. @ViewInject(R.id.tv_name)
  45. privateTextViewtv_name;
  46. @ViewInject(R.id.iv_image)
  47. privateImageViewiv_image;
  48. }

上面的代码是注解ViewHolder的标准模式,相信大家完全能够看明白。这里我加载图片使用到了XUtils3的加载网络图片的方法。后面我会详细进行讲解。

网络模块

XUtils的网络请求方法和一些网络请求框架的用法非常类似,我进行了一些简单的封装。
封装一共有3个文件,分别是网络请求工具类XUtil,请求响应数据的解析类,还有一个就是一个请求成功的一个接口回调类。
代码如下:

  1. publicclassXUtil{
  2. /**
  3. *发送get请求
  4. *@param<T>
  5. */
  6. publicstatic<T>CancelableGet(Stringurl,Map<String,String>map,CommonCallback<T>callback){
  7. RequestParamsparams=newRequestParams(url);
  8. if(null!=map){
  9. for(Map.Entry<String,String>entry:map.entrySet()){
  10. params.addQueryStringParameter(entry.getKey(),entry.getValue());
  11. }
  12. }
  13. Cancelablecancelable=x.http().get(params,callback);
  14. returncancelable;
  15. }
  16. /**
  17. *发送post请求
  18. *@param<T>
  19. */
  20. publicstatic<T>CancelablePost(Stringurl,Map<String,Object>map,CommonCallback<T>callback){
  21. RequestParamsparams=newRequestParams(url);
  22. if(null!=map){
  23. for(Map.Entry<String,Object>entry:map.entrySet()){
  24. params.addParameter(entry.getKey(),entry.getValue());
  25. }
  26. }
  27. Cancelablecancelable=x.http().post(params,callback);
  28. returncancelable;
  29. }
  30. /**
  31. *上传文件
  32. *@param<T>
  33. */
  34. publicstatic<T>CancelableUpLoadFile(Stringurl,Map<String,Object>map,CommonCallback<T>callback){
  35. RequestParamsparams=newRequestParams(url);
  36. if(null!=map){
  37. for(Map.Entry<String,Object>entry:map.entrySet()){
  38. params.addParameter(entry.getKey(),entry.getValue());
  39. }
  40. }
  41. params.setMultipart(true);
  42. Cancelablecancelable=x.http().get(params,callback);
  43. returncancelable;
  44. }
  45. /**
  46. *下载文件
  47. *@param<T>
  48. */
  49. publicstatic<T>CancelableDownLoadFile(Stringurl,Stringfilepath,CommonCallback<T>callback){
  50. RequestParamsparams=newRequestParams(url);
  51. //设置断点续传
  52. params.setAutoResume(true);
  53. params.setSaveFilePath(filepath);
  54. Cancelablecancelable=x.http().get(params,callback);
  55. returncancelable;
  56. }
  57. }
  58. publicclassJsonResponseParserimplementsResponseParser{
  59. //检查服务器返回的响应头信息
  60. @Override
  61. publicvoidcheckResponse(UriRequestrequest)throwsThrowable{
  62. }
  63. /**
  64. *转换result为resultType类型的对象
  65. *
  66. *@paramresultType返回值类型(可能带有泛型信息)
  67. *@paramresultClass返回值类型
  68. *@paramresult字符串数据
  69. *@return
  70. *@throwsThrowable
  71. */
  72. @Override
  73. publicObjectparse(TyperesultType,Class<?>resultClass,Stringresult)throwsThrowable{
  74. returnnewGson().fromJson(result,resultClass);
  75. }
  76. }
  77. publicclassMyCallBack<ResultType>implementsCallback.CommonCallback<ResultType>{
  78. @Override
  79. publicvoidonSuccess(ResultTyperesult){
  80. //可以根据公司的需求进行统一的请求成功的逻辑处理
  81. }
  82. @Override
  83. publicvoidonError(Throwableex,booleanisOnCallback){
  84. //可以根据公司的需求进行统一的请求网络失败的逻辑处理
  85. }
  86. @Override
  87. publicvoidonCancelled(CancelledExceptioncex){
  88. }
  89. @Override
  90. publicvoidonFinished(){
  91. }
  92. }

1.发送get请求示例:

  1. //本get请求来自于免费测试接口:http://www.k780.com/api/entry.baidu
  2. Stringurl="http://api.k780.com:88/?app=idcard.get";
  3. Map<String,String>map=newHashMap<>();
  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,newMyCallBack<PersonInfoBean>(){
  9. @Override
  10. publicvoidonSuccess(PersonInfoBeanresult){
  11. super.onSuccess(result);
  12. Log.e("result",result.toString());
  13. }
  14. @Override
  15. publicvoidonError(Throwableex,booleanisOnCallback){
  16. super.onError(ex,isOnCallback);
  17. }
  18. });

2.发送post请求

  1. Stringurl="http://api.k780.com:88/?app=idcard.get";
  2. Map<String,Object>map=newHashMap<>();
  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,newMyCallBack<PersonInfoBean>(){
  8. @Override
  9. publicvoidonSuccess(PersonInfoBeanresult){
  10. super.onSuccess(result);
  11. Log.e("result",result.toString());
  12. }
  13. @Override
  14. publicvoidonError(Throwableex,booleanisOnCallback){
  15. super.onError(ex,isOnCallback);
  16. }
  17. });

3.上传文件
  1. /**
  2. *上传文件(支持多文件上传)
  3. */
  4. privatevoiduploadfile(){
  5. //图片上传地址
  6. Stringurl="";
  7. Map<String,Object>map=newHashMap<>();
  8. //传入自己的相应参数
  9. //map.put(key,value);
  10. //map.put(key,value);
  11. XUtil.UpLoadFile(url,map,newMyCallBack<String>(){
  12. @Override
  13. publicvoidonSuccess(Stringresult){
  14. super.onSuccess(result);
  15. }
  16. @Override
  17. publicvoidonError(Throwableex,booleanisOnCallback){
  18. super.onError(ex,isOnCallback);
  19. }
  20. });
  21. }

4.下载文件
  1. privatevoiddownloadfile(){
  2. //文件下载地址
  3. Stringurl="";
  4. //文件保存在本地的路径
  5. Stringfilepath="";
  6. XUtil.DownLoadFile(url,filepath,newMyCallBack<File>(){
  7. @Override
  8. publicvoidonSuccess(Fileresult){
  9. super.onSuccess(result);
  10. }
  11. @Override
  12. publicvoidonError(Throwableex,booleanisOnCallback){
  13. super.onError(ex,isOnCallback);
  14. }
  15. });

5.下载文件带进度条
  1. privatevoiddownloadprogressfile(){
  2. //文件下载地址
  3. Stringurl="";
  4. //文件保存在本地的路径
  5. Stringfilepath="";
  6. XUtil.DownLoadFile(url,filepath,newMyProgressCallBack<File>(){
  7. @Override
  8. publicvoidonSuccess(Fileresult){
  9. super.onSuccess(result);
  10. }
  11. @Override
  12. publicvoidonError(Throwableex,booleanisOnCallback){
  13. super.onError(ex,isOnCallback);
  14. }
  15. @Override
  16. publicvoidonLoading(longtotal,longcurrent,
  17. booleanisDownloading){
  18. super.onLoading(total,current,isDownloading);
  19. }
  20. });
  21. }

6.发送get请求(服务器以xml格式返回)
  1. privatevoidgetxml(){
  2. Stringurl="http://flash.weather.com.cn/wmaps/xml/china.xml";
  3. XUtil.Get(url,null,newMyCallBack<String>(){
  4. @Override
  5. publicvoidonSuccess(StringxmlString){
  6. super.onSuccess(xmlString);
  7. try{
  8. XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();
  9. XmlPullParserxmlPullParser=factory.newPullParser();
  10. xmlPullParser.setInput(newStringReader(xmlString));
  11. inteventType=xmlPullParser.getEventType();
  12. while(eventType!=XmlPullParser.END_DOCUMENT){
  13. switch(eventType){
  14. caseXmlPullParser.START_TAG:
  15. StringnodeName=xmlPullParser.getName();
  16. if("city".equals(nodeName)){
  17. StringpName=xmlPullParser.getAttributeValue(0);
  18. Log.e("TAG","cityis"+pName);
  19. }
  20. break;
  21. }
  22. eventType=xmlPullParser.next();
  23. }
  24. }catch(Exceptione){
  25. e.printStackTrace();
  26. }
  27. }
  28. @Override
  29. publicvoidonError(Throwableex,booleanisOnCallback){
  30. super.onError(ex,isOnCallback);
  31. }
  32. });
  33. }

图片加载模块

用法:

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

Xutils3的api还是比较简单的,相信大家都可以看懂,第一个参数传入一个View,第二个参数传入一个图片的网络地址,第三个参数一般是加载图片的配置。
下面看一下ImageOptions这个类吧:
  1. ImageOptionsoptions=newImageOptions.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框架的使用

    **XUtils框架详解** XUtils是一款为Android开发者设计的轻量级、全面的开发框架,由国内知名开发者wuyr创建。它集成了四大模块:数据库管理、UI操作、网络请求以及图片处理,大大简化了Android开发过程,提高了开发...

    xUtils 框架使用demo

    本项目是一个基于Eclipse的xUtils使用示例,通过这个demo,我们可以深入理解xUtils框架的核心功能和使用方法。 首先,xUtils的网络请求模块(HttpUtils)提供了异步和同步两种方式来发送HTTP请求。开发者可以方便地...

    Android xUtils框架解析

    **Android xUtils框架解析** xUtils是一个轻量级的Android开发框架,由知名开发者吴成峰(花神)创建。这个框架集成了多种功能,包括网络请求、图片加载、数据库操作、视图注入等,旨在简化Android应用的开发流程,...

    Android xUtils框架

    Android xUtils框架是一个广泛使用的开源库,由国内知名开发者吴成飞(whef)开发。这个框架集成了多种功能,包括视图注入、数据库操作、网络请求、图片加载等,极大地提高了Android开发的效率。在Android应用开发中...

    XUtils3的基本使用方法

    XUtils3是一款在Android开发中广泛使用的开源框架,它集成了图片加载、数据库操作、网络请求等多种功能,极大地提高了开发效率。本指南将详细介绍XUtils3的基本使用方法,包括如何引入库、配置项目、进行网络请求...

    Xutils使用

    【Xutils使用】 Xutils是Android开发中一款非常流行的开源框架,由国内知名开发者wyouflf维护。它集成了数据库操作、图片加载、网络请求、View...对于提升开发效率和降低项目复杂度,Xutils无疑是一个值得推荐的框架。

    Xutils3框架demo

    "Xutils3框架demo"是一个示例项目,展示了如何在实际应用中使用Xutils3。 1. **网络请求**:Xutils3提供了HttpUtils类,用于处理HTTP请求。你可以通过简单的API调用来发送GET或POST请求,框架会自动处理异步和同步...

    Android应用 xutils框架的下载功能

    通过以上步骤,你已经掌握了xUtils框架中下载功能的基本使用。在实际项目中,你可能还需要处理更多细节,如网络异常、权限管理、多线程下载等。但有了xUtils,这些工作都将变得更加简单和高效。在Text_xutil_...

    xUtils框架

    xUtils框架

    android源码-使用框架(xUtils)

    在这个“android源码-使用框架(xUtils)”的项目中,我们将深入探讨如何利用xUtils来构建一个高效的Android应用。 首先,`ViewPager`是Android中的一个组件,用于展示多个类似视图,常用于实现滑动切换的效果,如在...

    android xUtils网络框架

    在xUtils3.0版本中,网络框架得到了优化,使其更加高效且易于使用。这个框架的核心目标是简化Android开发,让开发者能够更专注于业务逻辑,而不是基础库的集成和配置。 xUtils的网络模块基于OkHttp,这是一个非常...

    xUtils 安卓类库框架开源

    android中的orm框架 一行代码就可以进行增删改查; 支持事务 默认关闭; 可通过注解自定义表名 列名 外键 唯一性约束 NOT NULL约束 CHECK约束等(需要混淆的时候请注解表名和列名); 支持绑定外键 保存实体时外键...

    xutils3开源框架

    XUtils3是一个广泛使用的Android开发框架,由知名开发者wyouflf维护。这个框架集成了多种功能,旨在简化Android应用的开发过程,提高开发效率。XUtils3的核心理念是模块化,使得开发者可以根据需求选择使用特定的...

    网络请求xUtils框架

    xUtils框架是一款由国内开发者开发的轻量级Android开发框架,它集成了多个功能模块,包括网络请求、图片加载、数据库操作等,旨在简化Android应用的开发流程,提高开发效率。在“网络请求xUtils框架”这个主题下,...

    安卓Xutils3网络工具,注解工具,图片工具和日志工具的使用,以及对网络工具的封装

    在Android开发中,Xutils3是一个非常实用的框架,它集成了网络请求、注解处理、图片加载和日志管理等多个功能,极大地提高了开发效率。本文将深入探讨Xutils3在网络工具、注解工具、图片工具和日志工具的使用,并...

    最新最全最好用的xUtils开发框架

    最新的"最新最全的xUtils框架"版本可能包含了更多的优化和新特性,比如更兼容新的Android版本,增加了更多实用的API,或者修复了已知的问题,以满足不断发展的Android开发需求。 总之,xUtils框架是Android开发中...

    Android中XUtils3框架使用方法详解(一)

    XUtils3是一个强大的Android开发框架,它集合了多种实用功能,包括注解处理、网络请求、图片加载和数据库操作。这个框架旨在简化Android应用的开发流程,提高开发效率。以下是对XUtils3四大功能模块的详细说明: 1....

    应用xUtils3框架编写的登录注册界面,使用的是xUtils3.3.22,数据解析使用gson

    应用xUtils3框架编写的登录注册界面,使用的是xUtils3.3.22,数据解析使用gson,内含xutils3.3.22jar包和gson2.2.2jar包, xutils3,登录注册界面和主界面,Gson数据解析,xutils3.3.22 jar包,gson的jar包

    xUtils3.jar最火的网络框架

    xUtils3变化较多所以建立了新的项目不在旧版(github.com/wyouflf/xUtils)上继续维护, 相对于旧版本: HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略; 支持标准的Cookie策略, ...

    xUtils3文件下载Demo

    在Android开发中,xUtils3是一个非常流行的开源框架,它为开发者提供了许多便利的功能,包括网络请求、数据库操作、图片加载等。在这个“xUtils3文件下载Demo”中,我们将探讨如何利用xUtils3框架来实现一个简单的...

Global site tag (gtag.js) - Google Analytics