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

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

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

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

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

[java] view plain copy print?

  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

[java] view plain copy print?

  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的注解:

[java] view plain copy print?

  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的注解:

[java] view plain copy print?

  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,请求响应数据的解析类,还有一个就是一个请求成功的一个接口回调类。

代码如下:

[java] view plain copy print?

  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请求示例:

[java] view plain copy print?

  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请求

[java] view plain copy print?

  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.上传文件

[java] view plain copy print?

  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.下载文件

[java] view plain copy print?

  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.下载文件带进度条

[java] view plain copy print?

  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格式返回)

[java] view plain copy print?

  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. }

图片加载模块

用法:

[java] view plain copy print?

  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这个类吧:

[java] view plain copy print?

  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

时间: 2024-10-14 13:12:49

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

XUtils3框架的基本用法(一)

本文为作者原创,转载请指明出处: http://blog.csdn.net/a1002450926/article/details/50341173 今天给大家带来XUtils3的基本介绍.本文章的案例都是基于XUtils3的API语法进行的演示.相信大家对这个框架也都了解过,以下简介下XUtils3的一些基本知识. XUtils3一共同拥有4大功能:注解模块,网络模块.图片载入模块.数据库模块. 使用XUtils仅仅须要在libs目录里面增加一个jar包.假设对server返回的数据进行封装的

开关控件在主流前端框架中的使用方法

本文仅介绍使用方法,后续再介绍实现方案及优劣对比. jquerymobile jqm可以使用checkbox和select模拟switch控件,只需要增加data-role='flipswitch'即可: 默认开关控件: <input type="checkbox" data-role="flipswitch" /> 若要变为选中状态,只需要增加一个checked属性即可,如下: <input type="checkbox" d

【进展】XUtils3框架的使用

刚刚SLP迎来了一个飞跃——成功地使用XUtils3框架从LL资源网站上拉取LIVE相关信息并显示成列表. 效果如下:

960网格布局框架(前端css框架)的使用方法

960框架总宽960px CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了.有人说,CSS框架不够先进,还有人说这些框架大大的节省了他们的开发时间.在此,我们将不再讨论这个问题. 前段时间,我了解到了CSS框架.经过对Malo.BluePrint和960做了实验对比后,我得出一个结论:我最喜欢960CSS框架. 本教程将解释这个框架的基本原理,这样你就可以用960来快速进入开发. 基本原理 你必须知道一些基本原理来“学习这个框架是如何工作的”.你可以通过实验(或者是用fir

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

struts2.5框架使用通配符指定方法(常见错误) 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace="/" extends="struts-default"> <!-- 配置Action --> <actionname="user_*" class="userAction" method="{

dwr框架中DWRUtil的方法

dwr框架中DWRUtil的方法 2008-10-14 17:57:23|  分类: JAVA |  标签: |举报 |字号大中小 订阅 7. util.js 功能 util.js包含了一些工具函数来帮助你用javascript数据(例如从服务器返回的数据)来更新你的web页面. 你可以在DWR以外使用它,因为它不依赖于DWR的其他部分.你可以下载整个DWR或者单独下载. 4个基本的操作页面的函数:getValue[s]()和setValue[s]()可以操作大部分HTML元素除了table,l

session过期跳转到登陆页面并跳出iframe框架的两个方法

最近在做拦截器,判断用户登录后操作超时,失去权限然后要重新登录,但是用的iframe,返回的登陆页总是在框架中显示,我百度了下,总是只有其中一个方法,现在分享下两种解决方法,希望对你们有帮助: 方法一: 一般使用filter过滤用户是否登录,如果用户没有登陆则转向登陆页面,这时候可以使用response.sendRedirect().但当在页面上使用了iframe后,发现被重定向的只是父页面中的iframe区域,登陆页面内容显示在该区域中.说明在过滤器中发送重定向请求时,是在iframe页面发送

Laravel框架中的make方法详解

为什么网上已经有这么多的介绍Laravel的执行流程了,Laravel的容器详解了,Laravel的特性了,Laravel的启动过程了之类的文章,我还要来再分享呢? 因为,每个人的思维方式和方向是不一样的,所以就会出现这样的一个场景,当你遇到一个问题在网上寻求答案的时候,有很多文章都解释了你的这个问题,但是你只对其中一篇感兴趣,那是因为作者的思维方式和你的很接近而作者的文笔也可能是你喜欢的那种类型.正因如此,我也来分享一些我在研究Laravel框架时的一些观点和看法,希望给那些和我有类似思维方式

讲述了Django框架模板的使用方法

文章来源: 敏而好学论坛 嗨学网www.piaodoo.com 欢迎大家相互学习本文实例讲述了Django框架模板的使用方法.分享给大家供大家参考,具体如下: 创建模板文件夹 在项目下床架一个模板文件夹 在templates下面为了区分是哪一个应用的模板再建一个与应用同名的文件夹. 在setting.py的TEMLATES里配置模板文件的路径 在视图函数里return reder def index(request):#视图函数必须有一个参数 #进行处理,和M和T进行交互... # return