转载自: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. 六个创建模式之工厂方法模式(Factory Method Pattern)

    问题: 在使用简单工厂模式的时候,如果添加新的产品类,则必需修改工厂类,违反了开闭原则. 定义: 定义一个用于创建对象的接口,让子类决定具体实例化哪个产品类.此时工厂和产品都具有相同的继承结构,抽象产 ...

  2. 「C语言」单链表/双向链表的建立/遍历/插入/删除

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  3. 请用fontAwesome代替网页icon小图标

    1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...

  4. Force.com微信开发系列(三)申请测试账号及回复图文消息

    Force.com除了简单的文本消息回复外,还能回复图文并茂的消息.能回复音乐或者视频.能对用户发来的语音进行识别.能够搜集用户的地理位置信息并提供相应的内容或服务等,本文将对这些技能一一展开说明,在 ...

  5. 安卓开发_浅谈Android动画(三)

    一.LayoutAnimation布局动画 用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果 在res-anim文件下新建一个动画xml文件 <?xml ve ...

  6. Block的使用及循环引用的解决

    Block是一个很好用的东西,这篇文章主要来介绍:1.什么是Block?2.Block的使用?3.Block的循环引用问题及解决. 1.什么是Block? 说这个问题之前,我先来说一下闭包(Closu ...

  7. JSP入门&会话技术

    一.JSP    1.jsp技术        jsp是sun提供动态web资源开发技术.为了解决在Servlet中拼写html内容css.js内容十分不方便的问题,sun提供了这样一门技术.如果说S ...

  8. Objective-C之Protocol

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. 【AdaBoost算法】强分类器训练过程

    一.强分类器训练过程 算法原理如下(参考自VIOLA P, JONES M. Robust real time object detection[A] . 8th IEEE International ...

  10. python sorted用法

    python列表排序 python字典排序 sorted List的元素可以是各种东西,字符串,字典,自己定义的类等. sorted函数用法如下: sorted(data, cmp=None, key ...