热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

这篇文章主要介绍了Android中XUtils3框架使用方法详解(一)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

xUtils简介

xUtils 包含了很多实用的android工具。

xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...

xUitls 最低兼容android 2.2 (api level 8)

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

下面简单介绍下XUtils3的一些基本知识。

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

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

 
 

注解模块

Activity的注解

1.在Application的oncreate方法中加入下面代码:

x.Ext.init(this);

2.在Activity的oncreate方法中加入下面代码:

x.view().inject(this);

3.加载当前的Activity布局需要如下注解:

@ContentView加入到Activity的上方

4.给View进行初始化需要如下注解:

@InjectView

5.处理控件的各种响应事件需要如下注解:

@Envent

@ContentView(R.layout.activity_main) 
public class MainActivity extends ActionBarActivity { 
@ViewInject(R.id.btn_get) 
Button btn_get; 
@ViewInject(R.id.btn_post) 
Button btn_post; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
x.view().inject(this); 
btn_get.setText("发送get请求"); 
btn_post.setText("发送post请求"); 
} 
//等同于@Event(value={R.id.btn_get,R.id.btn_post},type=View.OnClickListener.class) 
@Event(value={R.id.btn_get,R.id.btn_post}) 
private void getEvent(View view){ 
switch(view.getId()){ 
case R.id.btn_get: 
Toast.makeText(MainActivity.this, btn_get.getText().toString().trim(), 0).show(); 
break; 
case R.id.btn_post: 
Toast.makeText(MainActivity.this, btn_post.getText().toString().trim(), 0).show(); 
break; 
} 
} 

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

另外需要注意的一点是按钮的点击事件必须用private进行修饰。

Fragment的注解:

@ContentView(R.layout.fragment_first) 
public class FirstFragment extends Fragment{ 
private MyAdapter adapter; 
private List list=new ArrayList<>(); 
private List listUrl=new ArrayList<>(); 
private List listName=new ArrayList<>(); 
@ViewInject(R.id.btn_test) 
Button btn_test; 
@ViewInject(R.id.listView) 
ListView listView; 
@Override 
public View onCreateView(LayoutInflater inflater, 
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
return x.view().inject(this, inflater, container); 
} 

ViewHolder的注解:

public class MyAdapter extends BaseAdapter{ 
private Context context; 
private List list; 
private LayoutInflater mInflater; 
private ImageOptions options; 
public ViewHolder holder; 
public MyAdapter(Context context, List list) { 
this.cOntext= context; 
this.list = list; 
this.mInflater=LayoutInflater.from(context); 
optiOns=new ImageOptions.Builder().setLoadingDrawableId(R.drawable.ic_launcher) 
.setLoadingDrawableId(R.drawable.ic_launcher).setUseMemCache(true).setCircular(true).build(); 
} 
@Override 
public int getCount() { 
return list.size(); 
} 
@Override 
public Object getItem(int position) { 
return list.get(position); 
} 
@Override 
public long getItemId(int position) { 
return position; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
holder=null; 
if(cOnvertView==null){ 
cOnvertView=mInflater.inflate(R.layout.itemone, null); 
holder=new ViewHolder(); 
x.view().inject(holder,convertView); 
convertView.setTag(holder); 
} 
else{ 
holder=(ViewHolder) convertView.getTag(); 
} 
Person bean=list.get(position); 
holder.tv_name.setText(bean.getName()); 
x.image().bind(holder.iv_image, bean.getImgUrl(), options); 
return convertView; 
} 
class ViewHolder{ 
@ViewInject(R.id.tv_name) 
private TextView tv_name; 
@ViewInject(R.id.iv_image) 
private ImageView iv_image; 
} 

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

网络模块

XUtils的网络请求方法和一些网络请求框架的用法非常类似,我进行了一些简单的封装。

封装一共有3个文件,分别是网络请求工具类XUtil,请求响应数据的解析类,还有一个就是一个请求成功的一个接口回调类。

代码如下:

public class XUtil { 
/** 
* 发送get请求 
* @param  
*/ 
public static  Cancelable Get(String url,Map map,CommonCallback callback){ 
RequestParams params=new RequestParams(url); 
if(null!=map){ 
for(Map.Entry entry : map.entrySet()){ 
params.addQueryStringParameter(entry.getKey(), entry.getValue()); 
} 
} 
Cancelable cancelable = x.http().get(params, callback); 
return cancelable; 
} 
/** 
* 发送post请求 
* @param  
*/ 
public static  Cancelable Post(String url,Map map,CommonCallback callback){ 
RequestParams params=new RequestParams(url); 
if(null!=map){ 
for(Map.Entry entry : map.entrySet()){ 
params.addParameter(entry.getKey(), entry.getValue()); 
} 
} 
Cancelable cancelable = x.http().post(params, callback); 
return cancelable; 
} 
/** 
* 上传文件 
* @param  
*/ 
public static  Cancelable UpLoadFile(String url,Map map,CommonCallback callback){ 
RequestParams params=new RequestParams(url); 
if(null!=map){ 
for(Map.Entry entry : map.entrySet()){ 
params.addParameter(entry.getKey(), entry.getValue()); 
} 
} 
params.setMultipart(true); 
Cancelable cancelable = x.http().get(params, callback); 
return cancelable; 
} 
/** 
* 下载文件 
* @param  
*/ 
public static  Cancelable DownLoadFile(String url,String filepath,CommonCallback callback){ 
RequestParams params=new RequestParams(url); 
//设置断点续传 
params.setAutoResume(true); 
params.setSaveFilePath(filepath); 
Cancelable cancelable = x.http().get(params, callback); 
return cancelable; 
} 
} 
public class JsonResponseParser implements ResponseParser { 
//检查服务器返回的响应头信息 
@Override 
public void checkResponse(UriRequest request) throws Throwable { 
} 
/** 
* 转换result为resultType类型的对象 
* 
* @param resultType 返回值类型(可能带有泛型信息) 
* @param resultClass 返回值类型 
* @param result 字符串数据 
* @return 
* @throws Throwable 
*/ 
@Override 
public Object parse(Type resultType, Class<&#63;> resultClass, String result) throws Throwable { 
return new Gson().fromJson(result, resultClass); 
} 
} 
public class MyCallBack implements Callback.CommonCallback{ 
@Override 
public void onSuccess(ResultType result) { 
//可以根据公司的需求进行统一的请求成功的逻辑处理 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
//可以根据公司的需求进行统一的请求网络失败的逻辑处理 
} 
@Override 
public void onCancelled(CancelledException cex) { 
} 
@Override 
public void onFinished() { 
} 
} 

1.发送get请求示例:

//本get请求来自于免费测试接口:http://www.k780.com/api/entry.baidu 
String url="http://api.k780.com:88/&#63;app=idcard.get"; 
Map map=new HashMap<>(); 
map.put("appkey", "10003"); 
map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4"); 
map.put("format", "json"); 
map.put("idcard", "110101199001011114"); 
XUtil.Get(url, map, new MyCallBack(){ 
@Override 
public void onSuccess(PersonInfoBean result) { 
super.onSuccess(result); 
Log.e("result", result.toString()); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 

2.发送post请求

String url="http://api.k780.com:88/&#63;app=idcard.get"; 
Map map=new HashMap<>(); 
map.put("appkey", "10003"); 
map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4"); 
map.put("format", "json"); 
map.put("idcard", "110101199001011114"); 
XUtil.Post(url, map, new MyCallBack(){ 
@Override 
public void onSuccess(PersonInfoBean result) { 
super.onSuccess(result); 
Log.e("result", result.toString()); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 

3.上传文件

/** 
* 上传文件(支持多文件上传) 
*/ 
private void uploadfile() { 
//图片上传地址 
String url=""; 
Map map=new HashMap<>(); 
//传入自己的相应参数 
//map.put(key, value); 
//map.put(key, value); 
XUtil.UpLoadFile(url, map, new MyCallBack(){ 
@Override 
public void onSuccess(String result) { 
super.onSuccess(result); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 
} 

4.下载文件

private void downloadfile() { 
//文件下载地址 
String url=""; 
//文件保存在本地的路径 
String filepath=""; 
XUtil.DownLoadFile(url, filepath,new MyCallBack(){ 
@Override 
public void onSuccess(File result) { 
super.onSuccess(result); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 

5.下载文件带进度条

private void downloadprogressfile() { 
//文件下载地址 
String url=""; 
//文件保存在本地的路径 
String filepath=""; 
XUtil.DownLoadFile(url, filepath,new MyProgressCallBack(){ 
@Override 
public void onSuccess(File result) { 
super.onSuccess(result); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
@Override 
public void onLoading(long total, long current, 
boolean isDownloading) { 
super.onLoading(total, current, isDownloading); 
} 
}); 
} 

6.发送get请求(服务器以xml格式返回)

private void getxml() { 
String url="http://flash.weather.com.cn/wmaps/xml/china.xml"; 
XUtil.Get(url, null, new MyCallBack(){ 
@Override 
public void onSuccess(String xmlString) { 
super.onSuccess(xmlString); 
try{ 
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
XmlPullParser xmlPullParser = factory.newPullParser(); 
xmlPullParser.setInput(new StringReader(xmlString)); 
int eventType = xmlPullParser.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
switch (eventType) { 
case XmlPullParser.START_TAG: 
String nodeName = xmlPullParser.getName(); 
if ("city".equals(nodeName)) { 
String pName = xmlPullParser.getAttributeValue(0); 
Log.e("TAG", "city is " + pName); 
} 
break; 
} 
eventType = xmlPullParser.next(); 
} 
}catch(Exception e){ 
e.printStackTrace(); 
} 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 
} 

图片加载模块

用法:

x.image().bind(imageView, url, imageOptions); 
x.image().bind(imageView, "file:///sdcard/test.gif", imageOptions); 
x.image().bind(imageView, "assets://test.gif", imageOptions); 
x.image().bind(imageView, url, imageOptions, new Callback.CommonCallback() {...}); 
x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback() {...}); 
x.image().loadFile(url, imageOptions, new Callback.CommonCallback() {...}); 

Xutils3的api还是比较简单的,相信大家都可以看懂,第一个参数传入一个View,第二个参数传入一个图片的网络地址,第三个参数一般是加载图片的配置。

下面看一下ImageOptions这个类吧:

ImageOptions optiOns=new ImageOptions.Builder() 
//设置加载过程中的图片 
.setLoadingDrawableId(R.drawable.ic_launcher) 
//设置加载失败后的图片 
.setFailureDrawableId(R.drawable.ic_launcher) 
//设置使用缓存 
.setUseMemCache(true) 
//设置显示圆形图片 
.setCircular(true) 
//设置支持gif 
.setIgnoreGif(false) 
.build(); 

其余的一些配置请参考源码

如果需要对加载的图片进行操作的话,可以使用:

x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback() {...});

通过返回的Drawable对象进行图片的处理,满足项目的个性化的要求.

说了这么多,我想大家至少会对XUtils3有了一个基本的了解,由于XUtils3的数据库的用法比较多,本篇文章不会去涉及,下一篇文章我会为大家详细讲解XUtils3的数据库模块。大家赶紧现在动手操作一下吧!本文涉及到的所有实例都会在下面的demo中有涉及到,请自行参考。

相关阅读:

用xutils3.0进行下载项目更新

Android xUtils更新到3.0后的基本使用规则详解

以上所述是小编给大家介绍的Android中XUtils3框架使用方法详解(一),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
author-avatar
baby欧米茄
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有