xutils3
导入xutils3.0的module包,下载地址如下:
xutils3.0下载地址
然后project的gradle里面:
dependencies { classpath 'com.android.tools.build:gradle:2.2.1' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' }在application中加上:
x.Ext.init(this); // 这一步之后, 我们就可以在任何地方使用x.app()来获取Application的实例了. x.Ext.setDebug(false); // 是否输出debug日志这样就可以使用xutils3.0了。
数据库模块:
@Table(name = "userinfo")//表名
public class UserInfo {
@Column(name = "id",isId = true)//字段名 是否是ID
private String id ;
@Column(name = "username")
private String username ;
@Column(name = "phone")
private String phone ;
@Column(name = "sex")
private int sex ; //0 nv 1 nan
@Column(name = "nickname")
private String nickname ;
@Column(name = "password")
private String password ;
}
先写一个获取DbManager的工具类。
public class Dbutil {
private static DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
// 数据库的名字
.setDbName("dbname")
// 保存到指定路径
// .setDbDir(new
// File(Environment.getExternalStorageDirectory().getAbsolutePath()))
// 数据库的版本号
.setDbVersion(1)
.setDbOpenListener(new DbManager.DbOpenListener() {
@Override
public void onDbOpened(DbManager db) {
// 开启WAL, 对写入加速提升巨大
db.getDatabase().enableWriteAheadLogging();
}
})
// 数据库版本更新监听
.setDbUpgradeListener(new DbManager.DbUpgradeListener() {
@Override
public void onUpgrade(DbManager dbManager, int arg1, int arg2) {
LogUtil.e("数据库版本更新了!");
}
});
public static DbManager getManger(){
DbManager manager = x.getDb(daoConfig);
return manager;
}
}
Dbutil.getManger().save(userInfo);
删除数据:
Dbutil.getManger().delete(this.userInfo);
Dbutil.getManger().update(userInfo);
Dbutil.getManger().selector(UserInfo.class).where("id", "=", 1).findFirst();
图片加载:
x.image().bind(imgview,imgurl);
还有一种没有view时的情况:
x.image().loadFile(imgurl,options,callback)
options = new ImageOptions.Builder()
// 图片缩放模式
//.setImageScaleType(ScaleType.CENTER_CROP)
// 下载中显示的图片
.setLoadingDrawableId(R.drawable.default_load)
// 下载失败显示的图片
.setFailureDrawableId(R.drawable.default_load)
.setAutoRotate(true)
.setUseMemCache(false)
.setIgnoreGif(false)
// 得到ImageOptions对象
.build();
xUtils3网络模块大大方便了在实际开发中网络模块的开发,xUtils3网络模块大致包括GET请求、POST请求、如何使用其他请求方式、上传文件、下载文件、使用缓存等功能,下面将做一一说明:
1)GET请求
RequestParams params = new RequestParams(url);
params.addQueryStringParameter("username","abc");
params.addQueryStringParameter("password","123");
x.http().get(params, new Callback.CommonCallback() {
@Override
public void onSuccess(String result) {
//解析result
}
//请求异常后的回调方法
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
//主动调用取消请求的回调方法
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
下面我们来看下带有缓存的GET请求,POST请求和其他请求方式类似,后面就不再赘述:
带有缓存的GET请求:
RequestParams params = new RequestParams(url);
params.addQueryStringParameter("username","abc");
params.addQueryStringParameter("password","123");
// 默认缓存存活时间, 单位:毫秒(如果服务器没有返回有效的max-age或Expires则参考)
params.setCacheMaxAge(1000 * 60);
x.http().get(params, new Callback.CacheCallback() {
private boolean hasError = false;
private String result = null;
@Override
public boolean onCache(String result) { //得到缓存数据, 缓存过期后不会进入
this.result = result;
return true; //true: 信任缓存数据, 不再发起网络请求; false不信任缓存数据
}
@Override
public void onSuccess(String result) {
//如果服务返回304或onCache选择了信任缓存,这时result为null
Log.i("JAVA", "开始请求");
if (result != null) {
this.result = result;
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
hasError = true;
Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
if (ex instanceof HttpException) { //网络错误
HttpException httpEx = (HttpException) ex;
int responseCode = httpEx.getCode();
String responseMsg = httpEx.getMessage();
String errorResult = httpEx.getResult();
//...
} else { //其他错误
//...
}
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
if (!hasError && result != null) {
//成功获取数据
Toast.makeText(x.app(), result, Toast.LENGTH_LONG).show();
}
}
});
上面onCache方法中需要注意的几点:
a)如果服务端没有返回过期时间,参考params.setCacheMaxAge(maxAge)方法。
b)客户端会根据服务端返回的header中max-age或expires来确定本地缓存是否给onCache方法。如果服务端没有返回max-age或expires,那么缓存将一直保存,除非这里自己定义了返回false,那么xUtils将请求新数据, 来覆盖它。
c)如果信任该缓存返回true,将不再请求网络。返回false继续请求网络,但会在请求头中加上ETag,Last-Modified等信息。如果服务端返回304,则表示数据没有更新,不继续加载数据。
2)POST请求
RequestParams params = new RequestParams(url);
params.addBodyParameter("username","abc");
params.addParameter("password","123");
params.addHeader("head","android"); //为当前请求添加一个头
x.http().post(params, new Callback.CommonCallback() {
@Override
public void onSuccess(String result) {
//解析result
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
3)其他网络请求方式
RequestParams params = new RequestParams(url);
params.addParameter("username","abc");
x.http().request(HttpMethod.PUT, params, new Callback.CommonCallback() {
@Override
public void onSuccess(String result) {
//解析result
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
4)上传文件
String path="/mnt/sdcard/Download/icon.jpg";
RequestParams params = new RequestParams(url);
params.setMultipart(true);
params.addBodyParameter("file",new File(path));
x.http().post(params, new Callback.CommonCallback() {
@Override
public void onSuccess(String result) {
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
5)下载文件
这里以下载apk为例进行说明,apk下载完成后,自动调用系统的安装方法。
url = "http://127.0.0.1/server/abc.apk";
RequestParams params = new RequestParams(url);
//自定义保存路径,Environment.getExternalStorageDirectory():SD卡的根目录
params.setSaveFilePath(Environment.getExternalStorageDirectory()+"/myapp/");
//自动为文件命名
params.setAutoRename(true);
x.http().post(params, new Callback.ProgressCallback() {
@Override
public void onSuccess(File result) {
//apk下载完成后,调用系统的安装方法
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(result), "application/vnd.android.package-archive");
getActivity().startActivity(intent);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
//网络请求之前回调
@Override
public void onWaiting() {
}
//网络请求开始的时候回调
@Override
public void onStarted() {
}
//下载的时候不断回调的方法
@Override
public void onLoading(long total, long current, boolean isDownloading) {
//当前进度和文件总大小
Log.i("JAVA","current:"+ current +",total:"+total);
}
});