本文为作者原创,转载请指明出处:

http://blog.csdn.net/a1002450926/article/details/50341173

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

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

使用XUtils仅仅须要在libs目录里面增加一个jar包。假设对server返回的数据进行封装的话,还须要导入一个Gson的jar包。

所需权限:

<uses-permission android:name="android.permission.INTERNET" />
<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

示比例如以下:

    @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_getbutton时。弹出了“发送get请求”的效果。到这里,大家算是对XUtils的注解有个一个主要的认识,以下我在强调一点的是,@Event这个注解默认情况下type属性为View.OnClickListener.class.假设你想实现其余点击事件效果,仅仅须要把type值进行改动就可以。

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

Fragment的注解:

@ContentView(R.layout.fragment_first)
public class FirstFragment extends Fragment{
private MyAdapter adapter;
private List<Person> list=new ArrayList<>();
private List<String> listUrl=new ArrayList<>();
private List<String> 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<Person> list;
private LayoutInflater mInflater;
private ImageOptions options;
public ViewHolder holder;
public MyAdapter(Context context, List<Person> 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 <T>
*/
public static <T> Cancelable Get(String url,Map<String,String> map,CommonCallback<T> callback){
RequestParams params=new RequestParams(url);
if(null!=map){
for(Map.Entry<String, String> entry : map.entrySet()){
params.addQueryStringParameter(entry.getKey(), entry.getValue());
}
}
Cancelable cancelable = x.http().get(params, callback);
return cancelable;
} /**
* 发送post请求
* @param <T>
*/
public static <T> Cancelable Post(String url,Map<String,Object> map,CommonCallback<T> callback){
RequestParams params=new RequestParams(url);
if(null!=map){
for(Map.Entry<String, Object> entry : map.entrySet()){
params.addParameter(entry.getKey(), entry.getValue());
}
}
Cancelable cancelable = x.http().post(params, callback);
return cancelable;
} /**
* 上传文件
* @param <T>
*/
public static <T> Cancelable UpLoadFile(String url,Map<String,Object> map,CommonCallback<T> callback){
RequestParams params=new RequestParams(url);
if(null!=map){
for(Map.Entry<String, Object> entry : map.entrySet()){
params.addParameter(entry.getKey(), entry.getValue());
}
}
params.setMultipart(true);
Cancelable cancelable = x.http().post(params, callback);
return cancelable;
} /**
* 下载文件
* @param <T>
*/
public static <T> Cancelable DownLoadFile(String url,String filepath,CommonCallback<T> 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 {
//检查server返回的响应头信息
@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<?> resultClass, String result) throws Throwable {
return new Gson().fromJson(result, resultClass);
}
}
public class MyCallBack<ResultType> implements Callback.CommonCallback<ResultType>{

    @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/? app=idcard.get";
Map<String,String> 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<PersonInfoBean>(){ @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/?app=idcard.get";
Map<String,Object> 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<PersonInfoBean>(){ @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<String,Object> map=new HashMap<>();
//传入自己的对应參数
//map.put(key, value);
//map.put(key, value);
XUtil.UpLoadFile(url, map, new MyCallBack<String>(){ @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<File>(){
@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<File>(){ @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请求(server以xml格式返回)

private void getxml() {
String url="http://flash.weather.com.cn/wmaps/xml/china.xml";
XUtil.Get(url, null, new MyCallBack<String>(){ @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<Drawable>() {...});
x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
x.image().loadFile(url, imageOptions, new Callback.CommonCallback<File>() {...});

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>() {...});

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

说了这么多,我想大家至少会对XUtils3有了一个主要的了解,因为XUtils3的数据库的使用方法比較多,本篇文章不会去涉及,下一篇文章我会为大家具体解说XUtils3的数据库模块。大家赶紧如今动手操作一下吧!本文涉及到的全部实例都会在以下的demo中有涉及到。请自行參考。

XUtils3.zip

XUtils3框架的基本用法(一)的更多相关文章

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

    转载自:http://blog.csdn.NET/a1002450926/article/details/50341173 今天给大家带来XUtils3的基本介绍,本文章的案例都是基于XUtils3的 ...

  2. scrapy框架中Spiders用法

    scrapy框架中Spiders用法 Spider类定义了如何爬去某个网站,包括爬取的动作以及如何从网页内容中提取结构化的数据 总的来说spider就是定义爬取的动作以及分析某个网页 工作流程分析 以 ...

  3. 线程框架Executor的用法举例

    java5线程框架Executor的用法举例 Executor 是 java5 下的一个多任务并发执行框架(Doug Lea),可以建立一个类似数据库连接池的线程池来执行任务.这个框架主要由三个接口和 ...

  4. 关于Masonry框架(AutoLayout)的用法--面向初学者

    Masonry作为目前较为流行的自动布局第三方框架,简单易用,大大减少了程序员花在UI布局和屏幕适配的精力与时间. 1 基本用法 1.1 事例1: 图1-1 // 首先是view1自动布局 [view ...

  5. Volley网络请求框架的基本用法

    备注: 本笔记是参照了 http://blog.csdn.net/ysh06201418/article/details/46443235  学习之后写下的 简介:  Volley是google官网退 ...

  6. Android ORMLite 框架的入门用法

    大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app:本篇博客将详细介绍ORMLite的简易用法. 下面开始介 ...

  7. [js高手之路] 我的开源javascript框架gdom - 选择器用法

    gdom框架是我开发的一款dom和字符串处理框架,目前版本是1.0.0. 使用方法跟jquery是差不多的, 会用jquery就会用gdom,目前 1.0.0版本的选择器完全支持CSS3选择器.没有做 ...

  8. 小程序 wepy框架 + iview-weapp的用法

    最近在弄wepy的时候在想有没有什么ui比较合适一点的wepy的,也是在网上看了好久发现iview还不错.引用简单,上手超快,组件绚丽!当然,这里还介绍下微信官方建议的框架也是和不错的,有需要的可以看 ...

  9. .Net RPC框架Thrift的用法

      关于Thrift 下面是来自百度百科关于Thrift的介绍: thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和引擎,以构建在 C++, Java, Go ...

随机推荐

  1. UDP Linux编程(客户端&服务器端)

    服务器端 服务器不用绑定地址,他只需要进行绑定相应的监听端口即可. #include <sys/types.h> #include <sys/socket.h> #includ ...

  2. vue父组件引用子组件方法显示undefined问题原因及解决方法

    关于vue父组件引用子组件问题 1.首先导入子组件并且在components中定义子组件 2.引用子组件,并定义ref,ref定义的名称用于 this.$refs所调用的名称 3.调用子组件的方法 ( ...

  3. 引入拦截器及swagger支持及解决redis无法初始化问题

    Springboot引入拦截器 自定义的拦截器类 Interceptor package cn.zytao.taosir.auth.config; import javax.annotation.Re ...

  4. 解题报告 之 HDU5317 RGCDQ

    解题报告 之 HDU5317 RGCDQ Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to ...

  5. cocos2d-x 2.2.2 在lua中更换CCSprite的图片

    废话不多说,直接上代码 --lua --获取场景 local scene= CCDirector:sharedDirector():getRunningScene() --创建精灵 local tes ...

  6. Making ViewState More Secure

    Unencrypted view state in ASP.NET 2.0 could leak sensitive information https://www.rapid7.com/db/vul ...

  7. springboot shiro 多realm配置认证、授权

    shiro进行登录认证和权限管理的实现.其中需求涉及使用两个角色分别是:门店,公司.现在要两者实现分开登录.即需要两个Realm——MyShiroRealmSHOP和MyShiroRealmCOMPA ...

  8. 制作可以SSH的Docker容器

    以 Ubuntu 16.04为例: Docker里的root密码是随机的, 用passwd来设置新的密码 安装完SSH_SERVER后, 默认是不能用root登录的. vi /etc/ssh/sshd ...

  9. POJ 1945 暴搜+打表 (Or 暴搜+判重)

    思路: 呃呃 暴搜+打表 暴搜的程序::稳稳的TLE+MLE (但是我们可以用来打表) 然后我们就可以打表过了 hiahiahia 可以证明最小的那个数不会超过200(怎么证明的我也不知道),然后就直 ...

  10. mysql读写分离原理及配置

    1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...