您的位置:首页 > 移动开发 > Android开发

XUtils3框架的使用

2017-06-17 11:34 302 查看
  本文转载地址:http://blog.csdn.net/a1002450926/article/details/50341173

       

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

使用XUtils只需要在libs文件夹里面加入一个jar包,如果对服务器返回的数据进行封装的话,还需要导入一个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_get按钮时,弹出了“发送get请求”的效果。到这里,大家算是对XUtils的注解有个一个基本的认识,下面我在强调一点的是,@Event这个注解默认情况下type属性为View.OnClickListener.class.如果你想实现其余点击事件效果,只需要把type值进行修改即可。

另外需要注意的一点是按钮的点击事件必须用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的注解:

@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;
}


网络模块

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 { //检查服务器返回的响应头信息 @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请求(服务器以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的实体bean的写法:

@Table(name="person")
public class PersonTable {
@Column(name="id",isId=true,autoGen=true)
private int id;
//姓名
@Column(name="name")
private String name;

//年龄
@Column(name="age")
private int age;

//性别
@Column(name="sex")
private String sex;

//工资
@Column(name="salary")
private String salary;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getSalary() {
return salary;
}

public void setSalary(String salary) {
this.salary = salary;
}

@Override
public String toString() {
return "PersonTable [id=" + id + ", name=" + name + ", age=" + age
+ ", sex=" + sex + ", salary=" + salary + "]";
}
}


通过上方的实体bean,我们需要知道一个表对应的实体bean需要注意以下几点:

1.在类名上面加入@Table标签,标签里面的属性name的值就是以后生成的数据库的表的名字

2.实体bean里面的属性需要加上@Column标签,这样这个标签的name属性的值会对应数据库里面的表的字段。

3.实体bean里面的普通属性,如果没有加上@Column标签就不会在生成表的时候在表里面加入字段。

4.实体bean中必须有一个主键,如果没有主键,表以后不会创建成功,@Column(name=”id”,isId=true,autoGen=true)这个属性name的值代表的是表的主键的标识,isId这个属性代表的是该属性是不是表的主键,autoGen代表的是主键是否是自增长,如果不写autoGen这个属性,默认是自增长的属性。

既然知道怎么写实体bean了,下面看看如何在程序中创建一个数据库和如何生成表的吧。

public class XUtil {
static DbManager.DaoConfig daoConfig;
public static DaoConfig getDaoConfig(){
File file=new File(Environment.getExternalStorageDirectory().getPath());
if(daoConfig==null){
daoConfig=new DbManager.DaoConfig()
.setDbName("shiyan.db")
.setDbDir(file)
.setDbVersion(1)
.setAllowTransaction(true)
.setDbUpgradeListener(new DbUpgradeListener() {
@Override
public void onUpgrade(DbManager db, int oldVersion, int newVersion) {

}
});
}
return daoConfig;
}
}
通过XUti.getDaoConfig()方法,我们能够获取到一个DaoConfig对象。通过getDaoConfig()方法,我们可以知道这个方法主要可以做以下事情:

1.setDbName 设置数据库的名称

2.setDbDir 设置数据库存放的路径

3.setDbVersion 设置数据库的版本

4.setAllowTransaction(true) 设置允许开启事务

5.setDbUpgradeListener 设置一个版本升级的监听方法

那么具体我们什么时候创建的表呢?如果我们单纯的调用XUti.getDaoConfig()方法是不能够创建PersonTable这个实体对应的person这张表的,那么如何创建表呢?

只需要一下几步:

1.DaoConfig daoConfig=XUtil.getDaoConfig();

2.DbManager db = x.getDb(daoConfig);

这里我要告诉大家的是,数据库里面表的创建的时间,只有在你对数据库里面的操作涉及到这张表的操作时,会先判断当前的表是否存在,如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD操作,但是只要我们想进行一张表的CRUD操作,我们必须先执行上面的2步,通俗点说就是必须拿到一个Dbmanger这个对象,我为什么这么说呢?那么咱们就先看一下DbManger的庐山真面目吧。

DbManager部分源码如下:
public interface DbManager extends Closeable {

DaoConfig getDaoConfig();

SQLiteDatabase getDatabase();

/**
* 保存实体类或实体类的List到数据库,
* 如果该类型的id是自动生成的, 则保存完后会给id赋值.
*
* @param entity
* @return
* @throws DbException
*/
boolean saveBindingId(Object entity) throws DbException;

/**
* 保存或更新实体类或实体类的List到数据库, 根据id对应的数据是否存在.
*
* @param entity
* @throws DbException
*/
void saveOrUpdate(Object entity) throws DbException;

/**
* 保存实体类或实体类的List到数据库
*
* @param entity
* @throws DbException
*/
void save(Object entity) throws DbException;

/**
* 保存或更新实体类或实体类的List到数据库, 根据id和其他唯一索引判断数据是否存在.
*
* @param entity
* @throws DbException
*/
void replace(Object entity) throws DbException;

///////////// delete
void deleteById(Class<?> entityType, Object idValue) throws DbException;

void delete(Object entity) throws DbException;

void delete(Class<?> entityType) throws DbException;

void delete(Class<?> entityType, WhereBuilder whereBuilder) throws DbException;

///////////// update
void update(Object entity, String... updateColumnNames) throws DbException;

void update(Object entity, WhereBuilder whereBuilder, String... updateColumnNames) throws DbException;

///////////// find
<T> T findById(Class<T> entityType, Object idValue) throws DbException;

<T> T findFirst(Class<T> entityType) throws DbException;

<T> List<T> findAll(Class<T> entityType) throws DbException;

<T> Selector<T> selector(Class<T> entityType) throws DbException;

DbModel findDbModelFirst(SqlInfo sqlInfo) throws DbException;

List<DbModel> findDbModelAll(SqlInfo sqlInfo) throws DbException;

///////////// table

/**
* 删除表
*
* @param entityType
* @throws DbException
*/
void dropTable(Class<?> entityType) throws DbException;

/**
* 添加一列,
* 新的entityType中必须定义了这个列的属性.
*
* @param entityType
* @param column
* @throws DbException
*/
void addColumn(Class<?> entityType, String column) throws DbException;

///////////// db

/**
* 删除库
*
* @throws DbException
*/
void dropDb() throws DbException;

/**
* 关闭数据库,
* xUtils对同一个库的链接是单实例的, 一般不需要关闭它.
*
* @throws IOException
*/
void close() throws IOException;

///////////// custom
void execNonQuery(SqlInfo sqlInfo) throws DbException;

void execNonQuery(String sql) throws DbException;

Cursor execQuery(SqlInfo sqlInfo) throws DbException;

Cursor execQuery(String sql) throws DbException;
}
通过DbManager这个类我们知道主要它做了以下几件事情:

1.getDaoConfig 获取数据库的配置信息

2.getDatabase 获取数据库实例

3.saveBindingId saveOrUpdate save 插入数据的3个方法(保存数据)

4.replace 只有存在唯一索引时才有用 慎重

5.delete操作的4种方法(删除数据)

6.update操作的2种方法(修改数据)

7.find操作6种方法(查询数据)

8.dropTable 删除表

9.addColumn 添加一列

10.dropDb 删除数据库

插入操作

private void insert() {
try {
PersonTable person=new PersonTable();
person.setName("小丽");
person.setAge(19);
person.setSex("woman");
person.setSalary(4000);
db.save(person);
//db.saveOrUpdate(person);
//db.saveBindingId(person);
} catch (DbException e) {
e.printStackTrace();
}
}
结果如下:



3种插入操作所需要的参数都是一个实体bean。save和saveOrUpdate的区别就是当一个实体里面的主键一样时如果使用saveOrUpdate会将当前主键对应的这条数据进行替换,而如果你使用了save就会报错。

saveBindingId主要是存进去的数据如果当前表有主键回合主键进行绑定关联。

当你执行完这个方法后,你会看到数据库里面person表里面多了一条数据.

查询操作

当前数据库中的表的效果如下:



1.findById的使用

该方法主要是通过主键的值来进行查找表里面的数据

需求:查找上方person表里面id为3的数据

private void query(){
try {
PersonTable person = db.findById(PersonTable.class, "2");
Log.e("person",person.toString());
} catch (DbException e) {
e.printStackTrace();
}
}
结果如下:



2.findFirst的使用

该方法主要是返回当前表里面的第一条数据

需求:查找上方person表里面的第一条数据

private void query() {
try {
PersonTable person = db.findFirst(PersonTable.class);
Log.e("person", person.toString());
} catch (DbException e) {
e.printStackTrace();
}
}



3.findAll的使用

该方法主要是返回当前表里面的所有数据

需求:查找person表里面的所有数据

private void query() {
try {
List<PersonTable> persons = db.findAll(PersonTable.class);
Log.e("persons", persons.toString());
} catch (DbException e) {
e.printStackTrace();
}
}


4.selector的使用

该方法主要是用来进行一些特定条件的查找

需求:查找person表里面age大于30并且性别为man的数据

private void query() {
try {
List<PersonTable> persons = db.selector(PersonTable.class).where("age", ">", 30).and("sex", "=", "man").findAll();
for(PersonTable person:persons){
Log.e("person",person.toString());
}
} catch (DbException e) {
e.printStackTrace();
}
}



5.findDbModelFirst的使用

说起这个方法,该方法返回一个DbModel对象,那么该对象是什么呢?

DbModel源码如下:

public final class DbModel {

/**
* key: columnName
* value: valueStr
*/
private HashMap<String, String> dataMap = new HashMap<String, String>();

public String getString(String columnName) {
return dataMap.get(columnName);
}

public int getInt(String columnName) {
return Integer.valueOf(dataMap.get(columnName));
}

public boolean getBoolean(String columnName) {
String value = dataMap.get(columnName);
if (value != null) {
return value.length() == 1 ? "1".equals(value) : Boolean.valueOf(value);
}
return false;
}

public double getDouble(String columnName) {
return Double.valueOf(dataMap.get(columnName));
}

public float getFloat(String columnName) {
return Float.valueOf(dataMap.get(columnName));
}

public long getLong(String columnName) {
return Long.valueOf(dataMap.get(columnName));
}

public Date getDate(String columnName) {
long date = Long.valueOf(dataMap.get(columnName));
return new Date(date);
}

public java.sql.Date getSqlDate(String columnName) {
long date = Long.valueOf(dataMap.get(columnName));
return new java.sql.Date(date);
}

public void add(String columnName, String valueStr) {
dataMap.put(columnName, valueStr);
}

/**
* @return key: columnName
*/
public HashMap<String, String> getDataMap() {
return dataMap;
}

/**
* @param columnName
* @return
*/
public boolean isEmpty(String columnName) {
return TextUtils.isEmpty(dataMap.get(columnName));
}
}
通过源码,我们分析发现DbModel本质就是一个key为当前表的字段,value为当前某条记录的值的一个HashMap.

需求:查找person表中第一条数据的那个人的年龄age是多少。
private void query() {
try {
DbModel model = db.findDbModelFirst(new SqlInfo("select * from person"));
Log.e("age", model.getString("age"));
} catch (DbException e) {
e.printStackTrace();
}
}
6.findDbModelAll的用法

该方法的用途就是返回满足sqlInfo信息的所有数据的字段的一个集合。

需求:查找person表中年龄age大于25里面的所有人的姓名
private void query() {
try {
List<DbModel> persons = db.findDbModelAll(new SqlInfo("select * from person where age > 25"));
for(DbModel person:persons){
Log.e("name", person.getString("name"));
}
} catch (DbException e) {
e.printStackTrace();
}
}



修改操作

当前数据库中的表的效果如下:



修改一共有2种方法:

第一种:

需求:我们把上面的id为1的这条记录的age修改为25岁

private void update() {
try{
PersonTable person = db.findById(PersonTable.class, 1);
person.setAge(25);
db.update(person, "age");
}catch(Exception e){
e.printStackTrace();
}
}
通过方法,我们知道首先要通过DBManager通过查找的方法先找到id为1的这个实体bean,如果你对里面的哪个字段需要修改,只需要重新set这个属性的值,然后调用DBManager.update方法,第一个参数是需要修改的实体,第二个参数是对应的属性。



第二种:

需求:将person表中性别为man的工资salary都变成6000。

private void update() {
try {
List<PersonTable> persons = db.findAll(PersonTable.class);
for(PersonTable person:persons){
person.setSalary(6000);
db.update(person, WhereBuilder.b("sex", "=", "man"), "salary");
}
} catch (Exception e) {
e.printStackTrace();
}
}




修改数据一共就2种方法,基本都是需要一个实体bean对象去进行操作的,上面的第二种方法无非就是在修改数据时,多了一个限制条件,这样修改数据显得灵活一些。

上面第二种update的方法的参数简单介绍一下:

第一个参数:实体bean对象

第二个参数:一个WhereBuilder对象,主要是通过静态b方法去构造一个where条件语句

第三个参数:需要修改的字段名,如果你的需求是修改了2个或者更多个字段,只需要在后面加上相应的参数即可,例如第二种方法我不止修改salary还需要修改age统一为40岁,参考如下;

private void update() {
try {
List<PersonTable> persons = db.findAll(PersonTable.class);
for(PersonTable person:persons){
person.setSalary(6000);
person.setAge(40);
db.update(person, WhereBuilder.b("sex", "=", "man"), "salary","age");
}
} catch (Exception e) {
e.printStackTrace();
}
}


删除操作

当前数据库中的person表的效果如下:



1.
deleteById
的用法

该方法主要是根据表的主键进行单条记录的删除

需求:删除上方person表中id为5的记录

private void delete() {
try {
db.deleteById(PersonTable.class, 5);
} catch (DbException e) {
e.printStackTrace();
}
}
结果如下:



2.
delete(Object entity)
的用法

该方法主要是根据实体bean进行对表里面的一条或多条数据进行删除

需求:删除name为骆驼这条信息的记录

private void delete() {
try {
PersonTable person = db.selector(PersonTable.class).where("name", "=", "骆驼").findFirst();
db.delete(person);
} catch (DbException e) {
e.printStackTrace();
}
}



3.
delete(Class<?> entityType)


该方法主要是用来删除表格里面的所有数据,但是注意:表还会存在,只是表里面数据没有了

private void delete() {
try {
db.delete(PersonTable.class);
} catch (DbException e) {
e.printStackTrace();
}
}
4.
delete(Class<?> entityType, WhereBuilder whereBuilder)


该方法主要是根据where语句的条件进行删除操作

需求:将person表总sex为woman并且salary为5000的信息删除
private void delete() {
try {
db.delete(PersonTable.class, WhereBuilder.b("sex", "=", "woman").and("salary", "=", "5000"));
} catch (DbException e) {
e.printStackTrace();
}
}



5.
dropTable(Class<?> entityType)


该方法是用来删除表

private void delete() {
try {
db.dropTable(PersonTable.class);
} catch (DbException e) {
e.printStackTrace();
}
}
6.
dropDb()


该方法是用来删除数据库
db.dropDb();


其他方法

1.addColumn(Class<> entityType, String column)

需求:在上方表中加入一个country字段

PersonTable的实体代码如下:

@Table(name="person")
public class PersonTable {
@Column(name="id",isId=true,autoGen=true)
private int id;
//姓名
@Column(name="name")
private String name;

//年龄
@Column(name="age")
private int age;

//性别
@Column(name="sex")
private String sex;

//工资
@Column(name="salary")
private int salary;

//国家
@Column(name="country",property="中国")
private String country;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public int getSalary() {
return salary;
}

public void setSalary(int salary) {
this.salary = salary;
}

public String getCountry() {
return country;
}

public void setCountry(String country) {
this.country = country;
}

@Override
public String toString() {
return "PersonTable [id=" + id + ", name=" + name + ", age=" + age
+ ", sex=" + sex + ", salary=" + salary + ", country="
+ country + "]";
}
}
private void addColumn() {
try {
db.addColumn(PersonTable.class, "country");
} catch (DbException e) {
e.printStackTrace();
}
}
执行完addColumn方法,我们看到person表里面多了一个country字段.

结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android XUtils3