一:xUtils简介
xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(246K), 并且特性强大, 方便扩展:
稳定的基石
: AbsTask
和统一的回调接口Callback
, 任何异常, 即使你的回调方法实现有异常都会进入onError
, 任何情况下onFinished
总会让你知道任务结束了.orm
工具, http
模块得以更方便的实现cookie(支持domain, path, expiry等特性)和 缓存(支持Cache-Control, Last-Modified, ETag等特性)的支持.http
及其下载缓存的支持, image
模块的实现相当的简洁, 并且支持回收被view持有, 但被Mem Cache移除的图片, 减少页面回退时的闪烁..view
注解模块仅仅400多行代码却灵活的支持了各种View注入和事件绑定, 包括拥有多了方法的listener的支持.二:使用前的配置
1:使用Gradle构建时添加一下依赖即可:
compile 'org.xutils:xutils:3.5.0' 或者 compile 'org.xutils:xutils:3.3.40'
2:需要添加的权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />3: 初始化
// 在application的onCreate中初始化 @Override public void onCreate() { super.onCreate(); x.Ext.init(this); x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能. ... }
三:开始使用
1:view注解
/** * 1. 方法必须私有限定, * 2. 方法参数形式必须和type对应的Listener接口一致. * 3. 注解参数value支持数组: value={id1, id2, id3} * 4. 其它参数说明见{@link org.xutils.event.annotation.Event}类的说明. **/ @Event(value = R.id.btn_test_baidu1, type = View.OnClickListener.class/*可选参数, 默认是View.OnClickListener.class*/) private void onTestBaidu1Click(View view) { ... }
2:Bitmap图片
ImageOptions imageOptions = new ImageOptions.Builder() .setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120)) .setRadius(DensityUtil.dip2px(5)) // 如果ImageView的大小不是定义为wrap_content, 不要crop. .setCrop(true) // 很多时候设置了合适的scaleType也不需要它. // 加载中或错误图片的ScaleType //.setPlaceholderScaleType(ImageView.ScaleType.MATRIX) .setImageScaleType(ImageView.ScaleType.CENTER_CROP) .setLoadingDrawableId(R.mipmap.ic_launcher) .setFailureDrawableId(R.mipmap.ic_launcher) .build(); x.image().bind(imageView, url, imageOptions); // assets file x.image().bind(imageView, "assets://test.gif", imageOptions); // local file x.image().bind(imageView, new File("/sdcard/test.gif").toURI().toString(), imageOptions); x.image().bind(imageView, "/sdcard/test.gif", imageOptions); x.image().bind(imageView, "file:///sdcard/test.gif", imageOptions); x.image().bind(imageView, "file:/sdcard/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() {...});
3:DB数据库
DbManager.DaoConfig daoConfig = new DbManager.DaoConfig() .setDbName("test.db") // 不设置dbDir时, 默认存储在app的私有目录. .setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单, 先这样写了. .setDbVersion(2) .setDbOpenListener(new DbManager.DbOpenListener() { @Override public void onDbOpened(DbManager db) { // 开启WAL, 对写入加速提升巨大 db.getDatabase().enableWriteAheadLogging(); } }) .setDbUpgradeListener(new DbManager.DbUpgradeListener() { @Override public void onUpgrade(DbManager db, int oldVersion, int newVersion) { // TODO: ... // db.addColumn(...); // db.dropTable(...); // ... // or // db.dropDb(); } });
4:Http请求网络
1:普通
RequestParams requestParams = new RequestParams("网络地址"); requestParams.addQueryStringParameter("参数名称",值); x.http().get(requestParams,new Callback.CommonCallback(){ //请求成执行的方法 @Override public void onSuccess(String result) { Log.i("TAG",result); } //请求失败执行的方法 @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } });
2:被调用的方式
写一个方法,调用此方法时需要传入Map集合,在此遍历集合添加,上面的方法是直接添加
public void get(String url, Map map, final IResponse response) {
RequestParams params = new RequestParams(url);
for (Map.Entry entry : map.entrySet()) {
params.addQueryStringParameter(entry.getKey(), entry.getValue());
}
x.http().get(params, new Callback.CommonCallback() {
@Override
public void onSuccess(String result) {
Log.i(TAG, "onSuccess: " + result);
response.onSuccess(result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.e(TAG, "onError: " + ex.getMessage());
response.onFailed(ex.getMessage());
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}