import android.app.Application;
import org.xutils.DbManager;
import org.xutils.x;
import java.io.File;
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2017/3/8 15:55
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化xutils3
x.Ext.init(this);
//输出日志 设置为false就是为了不影响性能
x.Ext.setDebug(false);
}
public static DbManager getDb() {
//对daoConfig初始化 进行配置
DbManager.DaoConfig daoConfig = new DbManager.DaoConfig().setDbName("bw.db").setDbDir(new File("/mnt/sdcard")).setDbVersion(1);
DbManager db = x.getDb(daoConfig);
return db;
}
}
//建表
package com.bawei.xutils3.bean;
import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;
/**
* 1. 类的用途 数据库表跟实体类对象进行关联
* 2. @author forever
* 3. @date 2017/3/9 15:10
* onCreated 当第一次创建表的时候执行sql语句
*/
@Table(name = "Student", onCreated = "")
public class Student {
/**
* name = "id",表中的一个字段
* isId = true,是否是主键
* autoGen = true, 是否自增长
* property = "NOT NULL" 添加约束
*/
@Column(name = "id", isId = true, autoGen = true, property = "NOT NULL")
private int id;
@Column(name = "name")
private String name;
//无参构造方法如果不添加的话 数据库表创建不成功
public Student() {
}
public Student(String name) {
this.name = name;
}
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;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
//业务功能
package com.bawei.xutils3.activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bawei.xutils3.R;
import com.bawei.xutils3.app.MyApplication;
import com.bawei.xutils3.bean.Student;
import org.xutils.DbManager;
import org.xutils.common.Callback;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.ex.DbException;
import org.xutils.http.RequestParams;
import org.xutils.image.ImageOptions;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;
import java.util.ArrayList;
import java.util.List;
/**
* 注解的方式加载布局
*/
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
@ViewInject(R.id.tv)
TextView tv;
@ViewInject(R.id.iv)
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
/**
* 初始化注解
*/
x.view().inject(this);
tv.setText("这是我使用xutils3的注解方式");
}
/**
* 1,方法必须私有限定,
* 2,方法参数形式必须和type对应的Listener接口一致.
* 3,注解参数value支持数组: value={id1, id2, id3}
* type默认View.OnClickListener.class,故此处可以简化不写,@Event(R.id.bt_main)
* 默认的是单击事件
*/
// @Event(type = View.OnClickListener.class, value = R.id.tv)
@Event({R.id.tv, R.id.iv, R.id.bt_add, R.id.bt_find, R.id.bt_update, R.id.bt_delete})
private void testOnClick(View view) {
DbManager db = new MyApplication().getDb();
switch (view.getId()) {
case R.id.tv:
Toast.makeText(MainActivity.this, "这是我使用注解方式实现点击事件", Toast.LENGTH_SHORT).show();
getData();
break;
case R.id.iv:
Toast.makeText(MainActivity.this, "这是我使用注解方式实现点击事件", Toast.LENGTH_SHORT).show();
getServerData();
//通过ImageOptions.Builder().set方法设置图片的属性
ImageOptions options = new ImageOptions.Builder().setCircular(true).setCrop(true).setSize(100, 100).setLoadingDrawableId(R.mipmap.ic_launcher).build();
x.image().bind(iv, "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1489035859303&di=a701b850fecd73173a020305d46eec77&imgtype=0&src=http%3A%2F%2Fb.hiphotos.baidu.com%2Fzhidao%2Fpic%2Fitem%2F1f178a82b9014a90e7eb9d17ac773912b21bee47.jpg",
options);
break;
case R.id.bt_add:
//插入
Toast.makeText(MainActivity.this, "保存数据", Toast.LENGTH_SHORT).show();
List<Student> students = new ArrayList<>();
students.add(new Student("zhangsan"));
students.add(new Student("lisi"));
students.add(new Student("wangwu"));
students.add(new Student("zhaoliu"));
try {
db.save(students);
Toast.makeText(MainActivity.this, "保存数据成功", Toast.LENGTH_SHORT).show();
} catch (DbException e) {
e.printStackTrace();
}
break;
case R.id.bt_find:
try {
Student student = db.findFirst(Student.class);
Log.i("xxx", student.toString());
List<Student> studentList = db.findAll(Student.class);
for (Student student1 : studentList) {
Log.i("xxx", student1.toString());
}
} catch (DbException e) {
e.printStackTrace();
}
break;
case R.id.bt_update:
try {
//第一种方式 更新第一个对象的名字
Student student = db.findFirst(Student.class);
/* student.setName("wowo");
db.update(student, "name");*/
//第二种方式
/* WhereBuilder b = WhereBuilder.b();
b.and("id", "=", student.getId());
KeyValue value = new KeyValue("name", "sisi");
db.update(Student.class, b, value);*/
//第三种方式
student.setName("xixi");
db.saveOrUpdate(student);
Toast.makeText(MainActivity.this, "更新成功", Toast.LENGTH_SHORT).show();
} catch (DbException e) {
e.printStackTrace();
}
break;
case R.id.bt_delete:
try {
//删除表中的所有数据
// db.delete(Student.class);
//根据条件删除表中的数据
WhereBuilder b = WhereBuilder.b();
b.and("id", ">", "5");
b.and("id", "<", "8");
db.delete(Student.class, b);
Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
} catch (DbException e) {
e.printStackTrace();
}
break;
}
}
/**
* 长按事件
*
* @param v
* @return
*/
@Event(type = View.OnLongClickListener.class, value = R.id.iv)
private boolean testOnLongClick(View v) {
switch (v.getId()) {
case R.id.iv:
Toast.makeText(MainActivity.this, "这是我使用注解方式实现长按事件", Toast.LENGTH_SHORT).show();
postData();
break;
}
return true;
}
//post请求方式
private void postData() {
String url = "http://www.93.gov.cn/93app/data.do";
RequestParams params = new RequestParams(url);
params.addBodyParameter("channelId", "0");
params.addParameter("startNum", "0");
params.addHeader("head", "android");
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Log.i("xxx", result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
//get请求方式 获取网络数据 缓存
private void getData() {
String url = "http://www.93.gov.cn/93app/data.do";
RequestParams params = new RequestParams(url);
params.addQueryStringParameter("channelId", "0");
params.addQueryStringParameter("startNum", "0");
params.setCacheMaxAge(1000 * 60);
x.http().get(params, new Callback.CacheCallback<String>() {
private String result = null;
@Override
public boolean onCache(String result) {
this.result = result;
//默认false不走缓存 true 走缓存 过期之后就不走缓存
Toast.makeText(MainActivity.this, "走缓存", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public void onSuccess(String result) {
if (result != null) {
this.result = result;
}
Log.i("aaa", result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
//get请求方式 获取网络数据
private void getServerData() {
String url = "http://www.93.gov.cn/93app/data.do";
RequestParams params = new RequestParams(url);
params.addQueryStringParameter("channelId", "0");
params.addQueryStringParameter("startNum", "0");
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Log.i("xxx", result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
}