转载自: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. @ViewInject(R.id.btn_get)
  4. Button btn_get;
  5. @ViewInject(R.id.btn_post)
  6. Button btn_post;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  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. private void getEvent(View view){
  17. switch(view.getId()){
  18. case R.id.btn_get:
  19. Toast.makeText(MainActivity.this, btn_get.getText().toString().trim(), 0).show();
  20. break;
  21. case R.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. 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. @ViewInject(R.id.btn_test)
  8. Button btn_test;
  9. @ViewInject(R.id.listView)
  10. ListView listView;
  11. @Override
  12. public View onCreateView(LayoutInflater inflater,
  13. @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  14. return  x.view().inject(this, inflater, container);
  15. }

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. @Override
  15. public int getCount() {
  16. return list.size();
  17. }
  18. @Override
  19. public Object getItem(int position) {
  20. return list.get(position);
  21. }
  22. @Override
  23. public long getItemId(int position) {
  24. return position;
  25. }
  26. @Override
  27. public View getView(int position, View convertView, ViewGroup parent) {
  28. holder=null;
  29. if(convertView==null){
  30. convertView=mInflater.inflate(R.layout.itemone, null);
  31. holder=new ViewHolder();
  32. x.view().inject(holder,convertView);
  33. convertView.setTag(holder);
  34. }
  35. else{
  36. holder=(ViewHolder) convertView.getTag();
  37. }
  38. Person bean=list.get(position);
  39. holder.tv_name.setText(bean.getName());
  40. x.image().bind(holder.iv_image, bean.getImgUrl(), options);
  41. return convertView;
  42. }
  43. class ViewHolder{
  44. @ViewInject(R.id.tv_name)
  45. private TextView tv_name;
  46. @ViewInject(R.id.iv_image)
  47. private ImageView iv_image;
  48. }

上面的代码是注解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. * 发送post请求
  18. * @param <T>
  19. */
  20. public static <T> Cancelable Post(String url,Map<String,Object> map,CommonCallback<T> callback){
  21. RequestParams params=new RequestParams(url);
  22. if(null!=map){
  23. for(Map.Entry<String, Object> entry : map.entrySet()){
  24. params.addParameter(entry.getKey(), entry.getValue());
  25. }
  26. }
  27. Cancelable cancelable = x.http().post(params, callback);
  28. return cancelable;
  29. }
  30. /**
  31. * 上传文件
  32. * @param <T>
  33. */
  34. public static <T> Cancelable UpLoadFile(String url,Map<String,Object> map,CommonCallback<T> callback){
  35. RequestParams params=new RequestParams(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. Cancelable cancelable = x.http().get(params, callback);
  43. return cancelable;
  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. public class JsonResponseParser implements ResponseParser {
  59. //检查服务器返回的响应头信息
  60. @Override
  61. public void checkResponse(UriRequest request) throws Throwable {
  62. }
  63. /**
  64. * 转换result为resultType类型的对象
  65. *
  66. * @param resultType  返回值类型(可能带有泛型信息)
  67. * @param resultClass 返回值类型
  68. * @param result      字符串数据
  69. * @return
  70. * @throws Throwable
  71. */
  72. @Override
  73. public Object parse(Type resultType, Class<?> resultClass, String result) throws Throwable {
  74. return new Gson().fromJson(result, resultClass);
  75. }
  76. }
  77. public class MyCallBack<ResultType> implements Callback.CommonCallback<ResultType>{
  78. @Override
  79. public void onSuccess(ResultType result) {
  80. //可以根据公司的需求进行统一的请求成功的逻辑处理
  81. }
  82. @Override
  83. public void onError(Throwable ex, boolean isOnCallback) {
  84. //可以根据公司的需求进行统一的请求网络失败的逻辑处理
  85. }
  86. @Override
  87. public void onCancelled(CancelledException cex) {
  88. }
  89. @Override
  90. public void onFinished() {
  91. }
  92. }

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. @Override
  10. public void onSuccess(PersonInfoBean result) {
  11. super.onSuccess(result);
  12. Log.e("result", result.toString());
  13. }
  14. @Override
  15. public void onError(Throwable ex, boolean isOnCallback) {
  16. super.onError(ex, isOnCallback);
  17. }
  18. });

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. @Override
  9. public void onSuccess(PersonInfoBean result) {
  10. super.onSuccess(result);
  11. Log.e("result", result.toString());
  12. }
  13. @Override
  14. public void onError(Throwable ex, boolean isOnCallback) {
  15. super.onError(ex, isOnCallback);
  16. }
  17. });

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. @Override
  13. public void onSuccess(String result) {
  14. super.onSuccess(result);
  15. }
  16. @Override
  17. public void onError(Throwable ex, boolean isOnCallback) {
  18. super.onError(ex, isOnCallback);
  19. }
  20. });
  21. }

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. @Override
  12. public void onError(Throwable ex, boolean isOnCallback) {
  13. super.onError(ex, isOnCallback);
  14. }
  15. });

5.下载文件带进度条

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

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. @Override
  5. public void onSuccess(String xmlString) {
  6. super.onSuccess(xmlString);
  7. try{
  8. XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
  9. XmlPullParser xmlPullParser = factory.newPullParser();
  10. xmlPullParser.setInput(new StringReader(xmlString));
  11. int eventType = xmlPullParser.getEventType();
  12. while (eventType != XmlPullParser.END_DOCUMENT) {
  13. switch (eventType) {
  14. case XmlPullParser.START_TAG:
  15. String nodeName = xmlPullParser.getName();
  16. if ("city".equals(nodeName)) {
  17. String pName = xmlPullParser.getAttributeValue(0);
  18. Log.e("TAG", "city is " + pName);
  19. }
  20. break;
  21. }
  22. eventType = xmlPullParser.next();
  23. }
  24. }catch(Exception e){
  25. e.printStackTrace();
  26. }
  27. }
  28. @Override
  29. public void onError(Throwable ex, boolean isOnCallback) {
  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, 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

XUtils===XUtils3框架的基本使用方法的更多相关文章

  1. XUtils3框架的基本用法(一)

    本文为作者原创,转载请指明出处: http://blog.csdn.net/a1002450926/article/details/50341173 今天给大家带来XUtils3的基本介绍.本文章的案 ...

  2. struts2.5框架使用通配符指定方法常见错误

    struts2.5框架使用通配符指定方法(常见错误) 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace ...

  3. Laravel框架中的make方法详解

    为什么网上已经有这么多的介绍Laravel的执行流程了,Laravel的容器详解了,Laravel的特性了,Laravel的启动过程了之类的文章,我还要来再分享呢? 因为,每个人的思维方式和方向是不一 ...

  4. dwr框架中DWRUtil的方法

    dwr框架中DWRUtil的方法 2008-10-14 17:57:23|  分类: JAVA |  标签: |举报 |字号大中小 订阅     7. util.js 功能 util.js包含了一些工 ...

  5. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  6. XUtils3框架的初始体验(一)

    1.开源地址       https://github.com/wyouflf/xUtils3.git    如果使用eclipse可以 点击这里下载aar文件, 然后用zip解压, 取出jar包和s ...

  7. 学习ASP.NET Web API框架揭秘之“HTTP方法重写”

    最近在看老A的<ASP.NET Web API 框架揭秘>,这本书对于本人现阶段来说还是比较合适的(对于调用已经较为熟悉,用其开发过项目,但未深入理解过很多内容为何可以这样“调用”).看到 ...

  8. struts2.5框架使用通配符指定方法(常见错误)

    在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace="/" extends=&quo ...

  9. thinkphp 框架中的一部分方法解析

     1 thinkphp 框架 中判断输入的数值和数据库中的数值是否一致    首先 需要在view文件夹下建一个模板 名为zhuce.html <html> <head> &l ...

随机推荐

  1. javascript实现排序算法

    准备好好学习js了,js写的第一个排序 先推荐一个js在线编辑工具,RunJS,还不错. 冒泡排序 var arr = [2,4,1,5,3]; function handle(arr){ for(v ...

  2. 成熟的RosettaNet解决方案软件介绍

    RosettaNet是一套B2B标准,以标准来优化供应链管理流程,它可以缩短整个供应链各个供货周期.RosettaNet 标准为电子商务标准化提供一个健壮的.非专有的解决方案,它是免费的,通过 Ros ...

  3. [iOS] 使用xib作为应用程序入口 with IDE

    [iOS] 使用xib作为应用程序入口 with IDE 在「使用xib做为应用程序入口 with Code」这篇文章中,介绍了如何透过写Code的方式,来使用xib做为应用程序的入口.但其实在Xco ...

  4. 利用Jquery使用HTML5的FormData属性实现对文件的上传

    1.利用Jquery使用HTML5的FormData属性实现对文件的上传 在HTML5以前我们如果需要实现文件上传服务器等功能的时候,有时候我们不得不依赖于FLASH去实现,而在HTML5到来之后,我 ...

  5. 百度网盘采集源码 ,直接采集网盘添加cookies功能

    名称:百度网盘采集源码 程序语言:php 数据库:mysql 程序介绍: 1.直接采集百度网盘url 2.前端基于bootstrap 3.搜索考虑到后期上亿数据,是基于coreseek,搜索时间毫秒级 ...

  6. javascript --- 将共享属性迁移到原型中去

    当我们用一个构造函数创建对象时,其属性就会被添加到this中去.并且被添加到this中的属性实际上不会随着实体发生改变,这时,我们这种做法显得会很没有效率.例如: function her(){ th ...

  7. JavaScript焦点轮播图

    在慕课学习了JavaScript焦点轮播图特效,在此做一个整理. 首先是html结构,我用的是本地同文件夹下的三张图片,多出来的第一张(pic3副本)和最后一张图片(pic1副本)是为了实现无缝切换效 ...

  8. Microsoft Dynamics CRM 2013 安装过程 图解

    在安装前,先持一下SQL配置管理,将相关的服务打开.(由于在虚拟机里,许多服务需要时才会打开,像Reporting Services需要处理报表时才打开) 注:Analysis Services 登录 ...

  9. Level 4 A10: 飞张?

    看来庄家的红桃2个输张没法解决,只能寄希望于飞K了. 但如果将牌2-2分布,还有更稳的打法.在下面这种东家3张黑桃的情况时,庄家只需垫到红桃2就行了. 如果东家有4张黑桃,那就只有飞红桃K这一条路了.

  10. UWP开发-HTTP详解

    HTTP作为一个基础功能,有必要介绍下在UWP下的使用方法. 一.Get请求: 一般我们用到的是GetAsync方法 public static async Task Gets(Uri uri) { ...