转载自: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. mysql bin-log和innodb_log的关系

    首先,二进制日志会记录所有与MySQL数据库有关的日志记录,包括InnoDB.MyISAM.Heap(memory除外)等其他存储引擎的日志.而InnoDB存储引擎的重做日志记录有关该引擎本身的事务日 ...

  2. SQL对字符串数组的处理详解

    原文地址:SQL字符串数组操作文章出处:DIY部落(http://www.diybl.com/course/7_databases/sql/sqlServer/2007106/76999.html) ...

  3. JSP利用freemarker生成基于word模板的word文档

    利用freemarker生成基于word模板的word文档 freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器 ...

  4. C#将DataTable转化为List<T>

    C#将DataTable转化为List<T> 在使用三层架构开发一个网站时,希望把DataTable对象转换为List<T>对象,于是在网上找资料,总结一个比较方便的方法来实现 ...

  5. SharePoint 2010 文档管理系列之准备篇

    前言:很早自己就想写一个系列的文章,但是不知道写什么,最近在QQ群里,好多人说在做文档管理,其实文档管理也是SharePoint的一个很不错的功能点,自己想了想,也想多学习点东西,所以写这个主题吧,今 ...

  6. iOS自定义AlertView 与 ActionSheet 遮罩提示+弹出动画

    产品大人总是能够想到很多让人欣慰的点子,基本所有能提示的地方都要很多文案啊图片之类 由此封装了一个半透明黑色遮罩的alert类(假装有图.jpg) 代码略糙,just share (逃 下载链接

  7. CSS 伪类和伪对象选(五)

    一.伪选择器 伪选择器包括:伪类选择器和伪对象选择器,以冒号(:)作为前缀,冒号后紧跟伪类或者伪对象名称,冒号前后没有空格,否则解析为包含选择器 如: div:hover{ font-size:12p ...

  8. swift2.2当中的inout参数的使用

    在Swift中,初次接触inout关键字以及它的用法,可能会让我们想起C/C++中的指针,但实际上Swift中inout只不过是按值传递,然后再写回原变量,而不是按引用传递: An in-out pa ...

  9. winform dateTimePicker选择时间控件-选择小时、分钟、秒

    今天对公司项目进行改版(一个c/s客户端程序),要求dateTimePicker 能够选择小时,分钟.但找了很久,发现没有相关的简化控件,都是web的,没有winform的. 可是功夫不负有心人啊. ...

  10. Centos7安装配置gitlab

    Centos7安装配置gitlab 这篇文字我会介绍在Centos7上安装gitlab,配置gitlab的smtp,并且创建项目demo. sudo yum install openssh-serve ...