Android Xutils 框架

(转)

目录(?)[-]

  1. xUtils简介
  2. 目前xUtils主要有四大模块
  3. 使用xUtils快速开发框架需要有以下权限
  4. 混淆时注意事项
  5. DbUtils使用方法
  6. ViewUtils使用方法
  7. HttpUtils使用方法
    1. 普通get方法
    2. 使用HttpUtils上传文件 或者 提交数据 到服务器post方法
    3. 使用HttpUtils下载文件
  8. BitmapUtils 使用方法
  9. 其他更多示例代码见sample文件夹中的代码
    1. 输出日志 LogUtils
 

xUtils简介

  • xUtils 包含了很多实用的android工具。
  • xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...
  • xUitls最低兼容android 2.2 (api level 8)

目前xUtils主要有四大模块:

  • DbUtils模块:

    • android中的orm框架,一行代码就可以进行增删改查;
    • 支持事务,默认关闭;
    • 可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
    • 支持绑定外键,保存实体时外键关联实体自动保存或更新;
    • 自动加载外键关联实体,支持延时加载;
    • 支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
  • ViewUtils模块:

    • android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定;
    • 新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
    • 目前支持常用的11种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
  • HttpUtils模块:

    • 支持同步,异步方式的请求;
    • 支持大文件上传,上传大文件不会oom;
    • 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD请求;
    • 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
    • 返回文本内容的GET请求支持缓存,可设置默认过期时间和针对当前请求的过期时间。
  • BitmapUtils模块:

    • 加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
    • 支持加载网络图片和本地图片;
    • 内存管理使用lru算法,更好的管理bitmap内存;
    • 可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...

使用xUtils快速开发框架需要有以下权限:

<uses-permission android:name="android.permission.INTERNET" /> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

混淆时注意事项:

  • 添加Android默认混淆配置${sdk.dir}/tools/proguard/proguard-android.txt
  • 不要混淆xUtils中的注解类型,添加混淆配置:-keep class * extends java.lang.annotation.Annotation { *; }
  • 对使用DbUtils模块持久化的实体类不要混淆,或者注解所有表和列名称@Table(name="xxx"),@Id(column="xxx"),@Column(column="xxx"),@Foreign(column="xxx",foreign="xxx");

DbUtils使用方法:

DbUtils db = DbUtils.create(this);
User user = new User(); //这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性
user.setEmail("wyouflf@qq.com");
user.setName("wyouflf");
db.save(user); // 使用saveBindingId保存实体时会为实体的id赋值 ...
// 查找
Parent entity = db.findById(Parent.class, parent.getId());
List<Parent> list = db.findAll(Parent.class);//通过类型查找 Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=","test")); // IS NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=", null));
// IS NOT NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","!=", null)); // WHERE id<54 AND (age>20 OR age<30) ORDER BY id LIMIT pageSize OFFSET pageOffset
List<Parent> list = db.findAll(Selector.from(Parent.class)
.where("id" ,"<", 54)
.and(WhereBuilder.b("age", ">", 20).or("age", " < ", 30))
.orderBy("id")
.limit(pageSize)
.offset(pageSize * pageIndex)); // op为"in"时,最后一个参数必须是数组或Iterable的实现类(例如List等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "in", new int[]{1, 2, 3}));
// op为"between"时,最后一个参数必须是数组或Iterable的实现类(例如List等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "between", new String[]{"1", "5"})); DbModel dbModel = db.findDbModelAll(Selector.from(Parent.class).select("name"));//select("name")只取出name列
List<DbModel> dbModels = db.findDbModelAll(Selector.from(Parent.class).groupBy("name").select("name", "count(name)"));
... List<DbModel> dbModels = db.findDbModelAll(sql); // 自定义sql查询
db.execNonQuery(sql) // 执行自定义sql
...

ViewUtils使用方法

  • 完全注解方式就可以进行UI绑定和事件绑定。
  • 无需findViewById和setClickListener等。
// xUtils的view注解要求必须提供id,以使代码混淆不受影响。
@ViewInject(R.id.textView)
TextView textView; //@ViewInject(vale=R.id.textView, parentId=R.id.parentView)
//TextView textView; @ResInject(id = R.string.label, type = ResType.String)
private String label; // 取消了之前使用方法名绑定事件的方式,使用id绑定不受混淆影响
// 支持绑定多个id @OnClick({R.id.id1, R.id.id2, R.id.id3})
// or @OnClick(value={R.id.id1, R.id.id2, R.id.id3}, parentId={R.id.pid1, R.id.pid2, R.id.pid3})
// 更多事件支持参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
@OnClick(R.id.test_button)
public void testButtonClick(View v) { // 方法签名必须和接口中的要求一致
...
}
...
//在Activity中注入:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewUtils.inject(this); //注入view和事件
...
textView.setText("some text...");
...
}
//在Fragment中注入:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.bitmap_fragment, container, false); // 加载fragment布局
ViewUtils.inject(this, view); //注入view和事件
...
}
//在PreferenceFragment中注入:
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ViewUtils.inject(this, getPreferenceScreen()); //注入view和事件
...
}
// 其他重载
// inject(View view);
// inject(Activity activity)
// inject(PreferenceActivity preferenceActivity)
// inject(Object handler, View view)
// inject(Object handler, Activity activity)
// inject(Object handler, PreferenceGroup preferenceGroup)
// inject(Object handler, PreferenceActivity preferenceActivity)

HttpUtils使用方法:

普通get方法

HttpUtils http = new HttpUtils();
http.send(HttpRequest.HttpMethod.GET,
"http://www.lidroid.com",
new RequestCallBack<String>(){
@Override
public void onLoading(long total, long current, boolean isUploading) {
testTextView.setText(current + "/" + total);
} @Override
public void onSuccess(ResponseInfo<String> responseInfo) {
textView.setText(responseInfo.result);
} @Override
public void onStart() {
} @Override
public void onFailure(HttpException error, String msg) {
}
});

使用HttpUtils上传文件 或者 提交数据 到服务器(post方法)

RequestParams params = new RequestParams();
params.addHeader("name", "value");
params.addQueryStringParameter("name", "value"); // 只包含字符串参数时默认使用BodyParamsEntity,
// 类似于UrlEncodedFormEntity("application/x-www-form-urlencoded")。
params.addBodyParameter("name", "value"); // 加入文件参数后默认使用MultipartEntity("multipart/form-data"),
// 如需"multipart/related",xUtils中提供的MultipartEntity支持设置subType为"related"。
// 使用params.setBodyEntity(httpEntity)可设置更多类型的HttpEntity(如:
// MultipartEntity,BodyParamsEntity,FileUploadEntity,InputStreamUploadEntity,StringEntity)。
// 例如发送json参数:params.setBodyEntity(new StringEntity(jsonStr,charset));
params.addBodyParameter("file", new File("path"));
... HttpUtils http = new HttpUtils();
http.send(HttpRequest.HttpMethod.POST,
"uploadUrl....",
params,
new RequestCallBack<String>() { @Override
public void onStart() {
testTextView.setText("conn...");
} @Override
public void onLoading(long total, long current, boolean isUploading) {
if (isUploading) {
testTextView.setText("upload: " + current + "/" + total);
} else {
testTextView.setText("reply: " + current + "/" + total);
}
} @Override
public void onSuccess(ResponseInfo<String> responseInfo) {
testTextView.setText("reply: " + responseInfo.result);
} @Override
public void onFailure(HttpException error, String msg) {
testTextView.setText(error.getExceptionCode() + ":" + msg);
}
});

使用HttpUtils下载文件:

  • 支持断点续传,随时停止下载任务,开始任务
HttpUtils http = new HttpUtils();
HttpHandler handler = http.download("http://apache.dataguru.cn/httpcomponents/httpclient/source/httpcomponents-client-4.2.5-src.zip",
"/sdcard/httpcomponents-client-4.2.5-src.zip",
true, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。
new RequestCallBack<File>() { @Override
public void onStart() {
testTextView.setText("conn...");
} @Override
public void onLoading(long total, long current, boolean isUploading) {
testTextView.setText(current + "/" + total);
} @Override
public void onSuccess(ResponseInfo<File> responseInfo) {
testTextView.setText("downloaded:" + responseInfo.result.getPath());
} @Override
public void onFailure(HttpException error, String msg) {
testTextView.setText(msg);
}
}); ...
//调用cancel()方法停止下载
handler.cancel();

BitmapUtils 使用方法

BitmapUtils bitmapUtils = new BitmapUtils(this);

// 加载网络图片
bitmapUtils.display(testImageView, "http://bbs.lidroid.com/static/image/common/logo.png"); // 加载本地图片(路径以/开头, 绝对路径)
bitmapUtils.display(testImageView, "/sdcard/test.jpg"); // 加载assets中的图片(路径以assets开头)
bitmapUtils.display(testImageView, "assets/img/wallpaper.jpg"); // 使用ListView等容器展示图片时可通过PauseOnScrollListener控制滑动和快速滑动过程中时候暂停加载图片
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener));

输出日志 LogUtils

// 自动添加TAG,格式: className.methodName(L:lineNumber)
// 可设置全局的LogUtils.allowD = false,LogUtils.allowI = false...,控制是否输出log。
// 自定义log输出LogUtils.customLogger = new xxxLogger();
LogUtils.d("wyouflf");
  • 关于作者

    近来有一些其他网站盗用本博客内容,希望尊重作者。如有问题请留言,转载注明出处。http://blog.csdn.net/rain_butterfly/article/details/37812371

    参考:http://www.oschina.net/p/xutils

  • 项目git地址https://github.com/wyouflf/xUtils
    实例:数据传递接口定义
  • 接口调用:
    1. new xUtilsPost().cancelOrder(
    2. PZTuanApplication.appUserName,
    3. orderId + "", new IOAuthCallBack() {
    4. public void getIOAuthCallBack(
    5. String result) {
    6. // TODO Auto-generated method stub
    7. try {
    8. JSONObject jo = new JSONObject(
    9. result);
    10. Message msg = cancelOrder
    11. .obtainMessage(id, jo);
    12. cancelOrder.sendMessage(msg);
    13. } catch (JSONException e) {
    14. // TODO Auto-generated catch
    15. // block
    16. e.printStackTrace();
    17. }
    18. }
    19. });
    
    
    实例,BitmapUtils:
    1. public class xUtilsImageLoader {//框架里面设置了缓存和异步操作,不用单独设置线程池和缓存机制(也可以自定义缓存路径)
    2. private BitmapUtils bitmapUtils;
    3. private Context mContext;
    4. public xUtilsImageLoader(Context context) {
    5. // TODO Auto-generated constructor stub
    6. this.mContext = context;
    7. bitmapUtils = new BitmapUtils(mContext);
    8. bitmapUtils.configDefaultLoadingImage(R.drawable.logo_new);//默认背景图片
    9. bitmapUtils.configDefaultLoadFailedImage(R.drawable.logo_new);//加载失败图片
    10. bitmapUtils.configDefaultBitmapConfig(Bitmap.Config.RGB_565);//设置图片压缩类型
    11. }
    12. /**
    13. *
    14. * @author sunglasses
    15. * @category 图片回调函数
    16. */
    17. public class CustomBitmapLoadCallBack extends
    18. DefaultBitmapLoadCallBack<ImageView> {
    19. @Override
    20. public void onLoading(ImageView container, String uri,
    21. BitmapDisplayConfig config, long total, long current) {
    22. }
    23. @Override
    24. public void onLoadCompleted(ImageView container, String uri,
    25. Bitmap bitmap, BitmapDisplayConfig config, BitmapLoadFrom from) {
    26. // super.onLoadCompleted(container, uri, bitmap, config, from);
    27. fadeInDisplay(container, bitmap);
    28. }
    29. @Override
    30. public void onLoadFailed(ImageView container, String uri,
    31. Drawable drawable) {
    32. // TODO Auto-generated method stub
    33. }
    34. }
    35. private static final ColorDrawable TRANSPARENT_DRAWABLE = new ColorDrawable(
    36. android.R.color.transparent);
    37. /**
    38. * @author sunglasses
    39. * @category 图片加载效果
    40. * @param imageView
    41. * @param bitmap
    42. */
    43. private void fadeInDisplay(ImageView imageView, Bitmap bitmap) {//目前流行的渐变效果
    44. final TransitionDrawable transitionDrawable = new TransitionDrawable(
    45. new Drawable[] { TRANSPARENT_DRAWABLE,
    46. new BitmapDrawable(imageView.getResources(), bitmap) });
    47. imageView.setImageDrawable(transitionDrawable);
    48. transitionDrawable.startTransition(500);
    49. }
    50. public void display(ImageView container,String url){//外部接口函数
    51. bitmapUtils.display(container, url,new CustomBitmapLoadCallBack());
    52. }
    53. }
  • 实例:HttpGet:
    1. public class xUtilsGet {//自动实现异步处理,自己不用处理
    2. public void getJson(String url,RequestParams params,final IOAuthCallBack iOAuthCallBack){
    3. HttpUtils http = new HttpUtils();
    4. http.configCurrentHttpCacheExpiry(1000 * 10);//设置超时时间
    5. http.send(HttpMethod.GET, url, params, new RequestCallBack<String>() {//接口回调
    6. @Override
    7. public void onFailure(HttpException arg0, String arg1) {
    8. // TODO Auto-generated method stub
    9. }
    10. @Override
    11. public void onSuccess(ResponseInfo<String> info) {
    12. // TODO Auto-generated method stub
    13. iOAuthCallBack.getIOAuthCallBack(info.result);//利用接口回调数据传输
    14. }
    15. });
    16. }
    17. public void getCataJson(int cityId,IOAuthCallBack iOAuthCallBack) {//外部接口函数
    18. String url = "http://xxxxxxxxxx";
    19. RequestParams params = new RequestParams();
    20. params.addQueryStringParameter("currentCityId", cityId+"");
    21. getJson(url,params,iOAuthCallBack);
    22. }
    23. }
  • 实例:HttpPost(和HttpGet类似):
    1. public class xUtilsPost {//自动实现异步处理
    2. public void doPost(String url, RequestParams params,
    3. final IOAuthCallBack iOAuthCallBack) {
    4. HttpUtils http = new HttpUtils();
    5. http.configCurrentHttpCacheExpiry(1000 * 10);
    6. http.send(HttpMethod.POST, url, params, new RequestCallBack<String>() {
    7. @Override
    8. public void onFailure(HttpException arg0, String arg1) {
    9. // TODO Auto-generated method stub
    10. }
    11. @Override
    12. public void onSuccess(ResponseInfo<String> info) {
    13. // TODO Auto-generated method stub
    14. iOAuthCallBack.getIOAuthCallBack(info.result);
    15. }
    16. });
    17. }
    18. public void doPostLogin(int cityId, IOAuthCallBack iOAuthCallBack) {
    19. String url = "http://xxxxxxxxxxxx";
    20. RequestParams params = new RequestParams();
    21. params.addBodyParameter("currentCityId", cityId + "");
    22. params.addBodyParameter("path", "/apps/postCatch");
    23. doPost(url, params, iOAuthCallBack);
    24. }
    25. }

Android Xutils 框架(转)的更多相关文章

  1. Android Xutils框架使用问题及解决办法

    刚刚写了篇博客,提了下在使用XUtils时遇到的一个问题Android Xutils框架HttpUtil Get请求缓存问题 ,既然已经提起来这个问题,那我想了下,就把之前使用Xutils时遇到的几个 ...

  2. Android Xutils框架HttpUtil Get请求缓存问题

    话说,今天和服务器开发人员小小的逗逼了一下,为啥呢? 话说今天有个"收藏产品"的请求接口,是get request的哦,我客户端写好接口后,点击"收藏按钮",返 ...

  3. Android Xutils 框架

    XUtils是git上比较活跃 功能比较完善的一个框架,是基于afinal开发的,比afinal稳定性提高了不少,下面是介绍: 鉴于大家的热情,我又写了一篇Android 最火框架XUtils之注解机 ...

  4. Android xUtils框架(一) DbUtils

    在DbUtils中,只支持4中数据类型: public enum ColumnDbType { INTEGER("INTEGER"), REAL("REAL") ...

  5. android xUtils get post

    使用android xUtils框架,进行http的get和post验证. 参考链接: https://github.com/wyouflf/xUtils3 http://blog.csdn.net/ ...

  6. Android使用XUtils框架上传照片(一张或多张)和文本,server接收照片和文字(无乱码)

    Android上传图片,这里我使用了如今比較流行的XUtils框架.该框架能够实现文件上传.文件下载.图片缓存等等,有待研究. 以下是Android端上传的代码: xUtils.jar下载 Strin ...

  7. 值得推荐的android开源框架

    1.volley 项目地址https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling) ...

  8. 6个值得推荐的Android开源框架简介(转)

    虽然我们在做app的时候并不一定用到框架,但是一些好框架的思想是非常有学习价值的 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo  ...

  9. xUtils框架的使用

    xUtils简介 xUtils 包含了很多实用的android工具,xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有 ...

随机推荐

  1. 电商O2O-11种最佳运营模式

    免费模式,是在这种矛盾下应运而生的新型模式.免费模式在未来的几年中,将会不断的渗透到各个行业中,这不单单是加速了行业内部的洗牌速度,更是加速了行业之间的洗牌速度. 未来,免费模式会让行业之间的界限变得 ...

  2. sql like 时间

    and Convert(varchar(),TimeStamp,) like '%2013-09-06 09:46:03%'

  3. QWidget::paintEngine: Should no longer be called

    Qt新手,其实并不知道出现这个问题的本质原因,我的问题在于paintEvent中使用的painter是类的成员而不是临时新建的局部变量,改为使用局部变量问题就消失了.

  4. win7左ctrl和左alt键互换

    主要参考这篇文章: http://xyztony1985.blog.163.com/blog/static/3611782011752420104/ 感谢原博主 Windows Registry Ed ...

  5. `cocos2dx非完整`开篇

    相信每个人都有一些自己的项目开发习惯,在·开篇·中我主要是会提到一些项目的配置问题.无论做一款什么样的手游项目,我们总是会从需求的角度出发去选择开发引擎,开发工具等一些列的工具去完善我们的开发环境.当 ...

  6. linux2.6.24内核源代码分析(2)——扒一扒网络数据包在链路层的流向路径之一

    在2.6.24内核中链路层接收网络数据包出现了两种方法,第一种是传统方法,利用中断来接收网络数据包,适用于低速设备:第二种是New Api(简称NAPI)方法,利用了中断+轮询的方法来接收网络数据包, ...

  7. sqlserver -- 学习笔记(七)获取同组数据的前两条记录

    不啰嗦,直接上图,大概实现效果如下: 有上面这样一份数据,将他们按照userAccount和submitTime进行分组,然后提前每组数据的前两条记录 提取后数据如下: 实现的SQL如下: selec ...

  8. iOS-App的启动页设置

    一. 要求 1. 把一张图片设置成为启动页面. 二. 准备工作 1. 把准备的适配的(@1x,@2x,@3x)三张图片拖进工程中. 2. 打开LaunchScreen.storyboard. 在页面上 ...

  9. Android 学习笔记之Volley开源框架解析(四)

    学习内容: 1.NetWorkDispatcher网络请求线程调度... 2.NetWork网络请求抽象类... 3.BasicNetWork网络请求抽象类的具体实现... 4.NetWorkResp ...

  10. 使用autotools系列工具自动部署源代码编译安装

    在Linux系统下开发一个较大的项目,完全手动建立Makefile是一件费力而又容易出错的工作.autotools系列工具只需用户输入简单的目标文件.依赖文件.文件目录等就可以比较轻松地生成Makef ...