Xutils3.+框架的基本使用操作
来源:互联网 发布:解压软件winrar官网 编辑:程序博客网 时间:2024/06/06 18:32
Xutils3主要包括:xUtils加载图片功能、xUtils操作数据库、xUtils的网络请求和xUtils注解。xUtils的使用需要我们在清单文件中添加如下的权限:
<
uses-permission
android:name
=
"android.permission.INTERNET"
/>
<
uses-permission
android:name
=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
import android.app.Application;
public class AppContext extends Application {
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);// xUtils初始化
x.Ext.setDebug(true);// 显示log日志
}
}
android:name="com.example.xutilsdemo.AppContext"
1.xUtils注解
xUtils的注解主要包括:@ContentView加载布局、@InjectView 控件注解、@Envent 控件的响应事件
在使用注解时需先在Activity的oncreate方法中加入下面代码: x.view().inject(this);
//初始化
示例代码:
(1)对Activity的注解
@ContentView(R.layout.activity_main) // 加载布局文件
public class MainActivity extends Activity {
@ViewInject(R.id.btn)
private Button btn;// 控件注解
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);// 初始化
}
// 等同于@Event(value=R.id.btn_get,type=View.OnClickListener.class)
@Event(value = R.id.btn)
private void getButtonEvent(View v) {
switch (v.getId()) {
case R.id.btn:
Toast.makeText(getApplicationContext(), "点我了", Toast.LENGTH_SHORT).show();
break;
}
}
}
需要注意的是@Event这个注解默认情况下type属性为View.OnClickListener.class.如果你想实现其它点击事件,只需要把type值进行修改即可。另外需要注意的一点是按钮的点击事件必须用private进行修饰。
(2)对Fragment的注解
@ContentView(R.layout.fragment)
public class FragDemo extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return x.view().inject(this, inflater, container);
}
}
在对Fragment的注解中其他对控件的注解与Activity中的一致。
2.xUtils网络请求
这个没有什么多说的,直接看代码就ok了
示例代码:
(1)Post请求
RequestParams params = new RequestParams(path);
params.addBodyParameter("name", "admin");
params.addBodyParameter("pass", "111");//添加参数
x.http().post(params, new CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// 主动取消
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// 请求失败
}
@Override
public void onFinished() {
// 请求结束
}
@Override
public void onSuccess(String arg0) {
// 请求成功
}
});
(2) Get请求
RequestParams params = new RequestParams(path);
params.addQueryStringParameter("name", "admin");
params.addQueryStringParameter("pass", "111");// 添加参数
x.http().get(params, new CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// 主动取消
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// 请求失败
}
@Override
public void onFinished() {
// 请求结束
}
@Override
public void onSuccess(String arg0) {
// 请求成功
}
});
(3) 上传文件
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<string>() {
public void onCancelled(CancelledException arg0) {
// 主动取消
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// 请求失败
}
@Override
public void onFinished() {
// 请求结束
}
@Override
public void onSuccess(String arg0) {
// 请求成功
}
});
url =
"http://localhost/server/ABC.apk"
;
RequestParams params =
new
RequestParams(url);
//自定义保存路径,Environment.getExternalStorageDirectory():SD卡的根目录
params.setSaveFilePath(Environment.getExternalStorageDirectory()+
"/app/"
);
//自动为文件命名
params.setAutoRename(
true
);
x.http().post(params,
new
Callback.ProgressCallback<file>() {
@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);
}
public void onCancelled(CancelledException arg0) {
// 主动取消
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// 请求失败
}
@Override
public void onFinished() {
// 请求结束
}
@Override
public void onSuccess(String arg0) {
//apk下载完成后,调用系统的安装方法
Intent intent =
new
Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(result),
"application/vnd.android.package-archive"
);
getActivity().startActivity(intent);
});
private
void
setPic() {
/**
* 通过ImageOptions.Builder().set方法设置图片的属性
*/
ImageOptions options =
new
ImageOptions.Builder().setFadeIn(
true
).build();
//淡入效果
//ImageOptions.Builder()的一些其他属性:
//.setCircular(true) //设置图片显示为圆形
//.setSquare(true) //设置图片显示为正方形
//setCrop(true).setSize(200,200) //设置大小
//.setAnimation(animation) //设置动画
//.setFailureDrawable(Drawable failureDrawable) //设置加载失败的动画
//.setFailureDrawableId(int failureDrawable) //以资源id设置加载失败的动画
//.setLoadingDrawable(Drawable loadingDrawable) //设置加载中的动画
//.setLoadingDrawableId(int loadingDrawable) //以资源id设置加载中的动画
//.setIgnoreGif(false) //忽略Gif图片
//.setParamsBuilder(ParamsBuilder paramsBuilder) //在网络请求中添加一些参数
//.setRaduis(int raduis) //设置拐角弧度
//.setUseMemCache(true) //设置使用MemCache,默认true
/**
* 加载图片的4个bind方法
*/
x.image().bind(image01, urls[
0
]);
x.image().bind(image02, urls[
1
], options);
x.image().bind(image03, urls[
2
], options,
new
Callback.CommonCallback<drawable>() {
@Override
public
void
onSuccess(Drawable result) {
}
@Override
public
void
onError(Throwable ex,
boolean
isOnCallback) {
}
@Override
public
void
onCancelled(CancelledException cex) {
}
@Override
public
void
onFinished() {
}
});
x.image().bind(image04, urls[
3
], options,
new
Callback.CommonCallback<drawable>() {
@Override
public
void
onSuccess(Drawable result) {
}
@Override
public
void
onError(Throwable ex,
boolean
isOnCallback) {
}
@Override
public
void
onCancelled(CancelledException cex) {
}
@Override
public
void
onFinished() {
}
});
/**
* loadDrawable()方法加载图片
*/
Callback.Cancelable cancelable = x.image().loadDrawable(urls[
0
], options,
new
Callback.CommonCallback<drawable>() {
@Override
public
void
onSuccess(Drawable result) {
image03.setImageDrawable(result);
}
@Override
public
void
onError(Throwable ex,
boolean
isOnCallback) {
}
@Override
public
void
onCancelled(CancelledException cex) {
}
@Override
public
void
onFinished() {
}
});
//主动取消loadDrawable()方法
//cancelable.cancel();
/**
* loadFile()方法
* 应用场景:当我们通过bind()或者loadDrawable()方法加载了一张图片后,
* 它会保存到本地文件中,那当我需要这张图片时,就可以通过loadFile()方法进行查找。
* urls[0]:网络地址
*/
x.image().loadFile(urls[
0
],options,
new
Callback.CacheCallback<file>(){
@Override
public
boolean
onCache(File result) {
//在这里可以做图片另存为等操作
Log.i(
"JAVA"
,
"file:"
+result.getPath()+result.getName());
return
true
;
//相信本地缓存返回true
}
@Override
public
void
onSuccess(File result) {
Log.i(
"JAVA"
,
"file"
);
}
@Override
public
void
onError(Throwable ex,
boolean
isOnCallback) {
}
@Override
public
void
onCancelled(CancelledException cex) {
}
@Override
public
void
onFinished() {
}
});
}
先配置DaoConfig:
DbManager.DaoConfig daoConfig =
new
DbManager.DaoConfig()
//设置数据库名,默认xutils.db
.setDbName(
"app.db"
)
//设置表创建的监听
.setTableCreateListener(
new
DbManager.TableCreateListener() {
@Override
public
void
onTableCreated(DbManager db, TableEntity<!--?--> table){
}
})
//设置是否允许事务,默认true
//.setAllowTransaction(true)
//设置数据库路径,默认安装程序路径下
//.setDbDir(new File("/mnt/sdcard/"))
//设置数据库的版本号
//.setDbVersion(1)
//设置数据库更新的监听
.setDbUpgradeListener(
new
DbManager.DbUpgradeListener() {
@Override
public
void
onUpgrade(DbManager db,
int
oldVersion,
int
newVersion) {
}
})
//设置数据库打开的监听
.setDbOpenListener(
new
DbManager.DbOpenListener() {
@Override
public
void
onDbOpened(DbManager db) {
//开启数据库支持多线程操作,提升性能
db.getDatabase().enableWriteAheadLogging();
}
});
DbManager db = x.getDb(daoConfig);
然后创建数据库表ChildInfo的实体类:
@Table
(name =
"child_info"
,onCreated =
""
)
public
class
ChildInfo {
/**
* name = "id":数据库表中的一个字段
* isId = true:是否是主键
* autoGen = true:是否自动增长
* property = "NOT NULL":添加约束
*/
@Column
(name =
"id"
,isId =
true
,autoGen =
true
,property =
"NOT NULL"
)
private
int
id;
@Column
(name =
"c_name"
)
private
String cName;
public
ChildInfo(String cName) {
this
.cName = cName;
}
//默认的构造方法必须写出,如果没有,这张表是创建不成功的
public
ChildInfo() {
}
public
int
getId() {
return
id;
}
public
void
setId(
int
id) {
this
.id = id;
}
public
String getcName() {
return
cName;
}
public
void
setcName(String cName) {
this
.cName = cName;
}
@Override
public
String toString() {
return
"ChildInfo{"
+
"id="
+id+
",cName='"
+cName+'\
''
+
'}'
;
}
}
@Event
(R.id.create_db)
private
void
createDB(View v)
throws
DbException {
//用集合向child_info表中插入多条数据
ArrayList<childinfo> childInfos =
new
ArrayList<>();
childInfos.add(
new
ChildInfo(
"zhangsan"
));
childInfos.add(
new
ChildInfo(
"lisi"
));
childInfos.add(
new
ChildInfo(
"wangwu"
));
childInfos.add(
new
ChildInfo(
"zhaoliu"
));
childInfos.add(
new
ChildInfo(
"qianqi"
));
childInfos.add(
new
ChildInfo(
"sunba"
));
//db.save()方法不仅可以插入单个对象,还能插入集合
db.save(childInfos);
}
//删除数据库
@Event
(R.id.del_db)
private
void
delDB(View v)
throws
DbException {
db.dropDb();
}
//删除表
@Event
(R.id.del_table)
private
void
delTable(View v)
throws
DbException {
db.dropTable(ChildInfo.
class
);
}
@Event
(R.id.select_table)
private
void
selelctDB(View v)
throws
DbException {
//查询数据库表中第一条数据
ChildInfo first = db.findFirst(ChildInfo.
class
);
Log.i(
"JAVA"
,first.toString());
//添加查询条件进行查询
//第一种写法:
WhereBuilder b = WhereBuilder.b();
b.and(
"id"
,
">"
,
2
);
//构造修改的条件
b.and(
"id"
,
"<"
,
4
);
List<childinfo> all = db.selector(ChildInfo.
class
).where(b).findAll();
//findAll():查询所有结果
for
(ChildInfo childInfo :all){
Log.i(
"JAVA"
,childInfo.toString());
}
//第二种写法:
List<childinfo> all = db.selector(ChildInfo.
class
).where(
"id"
,
">"
,
2
).and(
"id"
,
"<"
,
4
).findAll();
for
(ChildInfo childInfo :all){
Log.i(
"JAVA"
,childInfo.toString());
}
}
@Event
(R.id.update_table)
private
void
updateTable(View v)
throws
DbException {
//第一种写法:
ChildInfo first = db.findFirst(ChildInfo.
class
);
first.setcName(
"zhansan2"
);
db.update(first,
"c_name"
);
//c_name:表中的字段名
//第二种写法:
WhereBuilder b = WhereBuilder.b();
b.and(
"id"
,
"="
,first.getId());
//构造修改的条件
KeyValue name =
new
KeyValue(
"c_name"
,
"zhansan3"
);
db.update(ChildInfo.
class
,b,name);
//第三种写法:
first.setcName(
"zhansan4"
);
db.saveOrUpdate(first);
}
//删除表中的数据
@Event
(R.id.delete_data)
private
void
delTableData(View v)
throws
DbException {
//第一种写法:
db.delete(ChildInfo.
class
);
//child_info表中数据将被全部删除
//第二种写法,添加删除条件:
WhereBuilder b = WhereBuilder.b();
b.and(
"id"
,
">"
,
2
);
//构造修改的条件
b.and(
"id"
,
"<"
,
4
);
db.delete(ChildInfo.
class
, b);
}
- Xutils3.+框架的基本使用操作
- Xutils3框架的基本使用一
- android XUtils3框架的基本使用
- Xutils3的基本使用
- xUtils3 的基本使用
- XUtils3框架的使用
- XUtils3框架的基本使用方法
- XUtils3框架的基本使用方法(一)
- XUtils3框架的基本使用方法(二)
- XUtils3框架的基本使用方法(一)
- XUtils3框架的基本使用方法(二)
- XUtils3框架的基本使用方法(一)
- XUtils3框架的基本使用方法(一)
- Xutils和Xutils3的基本使用
- xUtils3.0的基本使用规则
- Android Xutils和Xutils3的基本使用
- XUtils3框架最最最简单的使用
- 第三方框架Xutils3的简单使用
- 安装mysql数据库界面操作工具navicat
- linux驱动下platform总线框架
- oracle loop
- Rescue
- 网络带宽方案调研
- Xutils3.+框架的基本使用操作
- 一段javascript告警回放代码
- ConcurrentHashMap实现原理--中
- GitHub使用(二)
- CodeForces 274A k-Multiple Free Set (二分)
- 正则--特殊字符
- HDU 4565So Easy! (矩阵快速幂)(推公式)
- Excel VBA 代码笔记
- 两数之和