安卓第四天笔记-Sqlite
安卓第四天笔记-Sqlite
1.数据库的创建运行与更新
1.1.创建一个类继承SqliteOpenHelper

1.2.创建构造方法
/**
* 数据库创建类
* @author 刘楠
*
* 2016-2-20上午10:04:34
*/
public class DbSqliteOpenHelper extends SQLiteOpenHelper {
/**
*
* @param context 上下文
* @param name 数据库的名字如: students.db
* @param factory 游标工厂 ,类似JDBC中的ResultSet中的hasNext();
* @param version 数据库的版本
*/
public DbSqliteOpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 当数据库被创建时,执行,
* 只会执行一次
*/
@Override
public void onCreate(SQLiteDatabase db) {
}
/**
* 当数据版本升级时执行,
* 数据版本只能升不能降 从1开始
* 这里常用于更改数据库中的表的结构,如添加列,删除列,之类的,创建新的表
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
1.3.更改构造方法
/**
*
* @param context 上下文
* @param name 数据库的名字如: students.db
* @param factory 游标工厂 ,类似JDBC中的ResultSet中的hasNext();
* @param version 数据库的版本
*/
public DbSqliteOpenHelper(Context context) {
super(context, "student.db", null, 1);
}
更改后
/**
*
* @param context 上下文
* @param name 数据库的名字如: students.db
* @param factory 游标工厂 ,类似JDBC中的ResultSet中的hasNext();
* @param version 数据库的版本 这里的版本必须大于0,如果为0就会报错
*/
public DbSqliteOpenHelper(Context context) {
super(context, "student.db", null, 1);
}
源码中的解释,数据库版本必须大于等于0,否则会抛出异常

将数据库版本设置为0,运行

不能降版本

1.4.在onCreate方法中创建数据库表
/**
* 当数据库被创建时,执行,
* 只会执行一次
*/
@Override
public void onCreate(SQLiteDatabase db) {
//创建数据库表
//sql create table students(_id integer primary key, name varchar(30))
db.execSQL("create table students(_id integer primary key, name varchar(30))");
Log.i(TAG, "onCreate 方法执行了");
}
1.5.在Activity中实例化
/**
* 数据库初始化
* @author 刘楠
*
* 2016-2-20上午10:27:04
*/
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private DbSqliteOpenHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化
helper = new DbSqliteOpenHelper(this);
Log.i(TAG, "helper 实例化");
//执行下方的代码后才会创建数据库
helper.getWritableDatabase();
}
}
创建数据库后并不会被创建,只有执行了,getReadDatabase或者getWriteDatabase(),
才会执行onCreate中的方法

运行查看LOG

1.6.数据已经创建,查看数据库
将数据库文件导出到桌面
SQLite Expert Professional 3打开

1.7.修改数据库版本,同是添加一列
/**
* 当数据版本升级时执行,
* 数据版本只能升不能降 从1开始
* 这里常用于更改数据库中的表的结构,如添加列,删除列,之类的,创建新的表
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "onUpgrade 方法执行了");
//sql alter table students add gender varchar(10)
//添加列
db.execSQL("alter table students add gender varchar(10)");
}
查看日志

1.8.导出数据库中的文件再次查看

列已经添加成功
2.传统方式操作数据库
使用sql来操作数据库
/**
* 传统数据库操作工具类
* @author 刘楠
*
* 2016-2-20下午12:19:16
*/
public class StudentDao {
private static final String TAG = "StudentDao";
/*
* 操作数据库类
*/
private DbSqliteOpenHelper helper;
public StudentDao(Context context){
helper = new DbSqliteOpenHelper(context);
}
/**
* 插入方法
* @param name 姓名
* @param gender 性别
* @param stuno 学号
*/
public void insert(String name,String gender,String stuno){
//获取数据
SQLiteDatabase db = helper.getWritableDatabase();
String sql="insert into students values (null,?,?,?)";
//填充占位符
Object [] bindArgs={name,gender,stuno};
//执行SQL
db.execSQL(sql, bindArgs);
//关闭数据库连接
db.close();
}
/**
* 修改更改 update
* @param name 姓名
* @param gender 性别
* @param stuno 学号
*/
public void update(String name,String gender,String stuno){
//获取数据
SQLiteDatabase db = helper.getWritableDatabase();
String sql="update students set gender=?,stuno=? where name=?";
//填充占位符
Object [] bindArgs={gender,stuno,name};
//执行SQL
db.execSQL(sql, bindArgs);
//关闭数据库连接
db.close();
}
/**
* 删除
* @param name 姓名
*/
public void delete(String name){
//获取数据
SQLiteDatabase db = helper.getWritableDatabase();
String sql="delete from students where name=?";
//填充占位符
Object [] bindArgs={name};
//执行SQL
db.execSQL(sql, bindArgs);
//关闭数据库连接
db.close();
}
/**
* 查询全部
*
*/
public void getAll(){
//获取数据
SQLiteDatabase db = helper.getReadableDatabase();
String sql="select _id,name,gender,stuno from students";
//执行SQL
Cursor cursor = db.rawQuery(sql, null);
while(cursor.moveToNext()){
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
String stuno = cursor.getString(cursor.getColumnIndex("stuno"));
Log.i(TAG, "_id:"+_id+"name:"+name+",gender:"+gender+",stuno:"+stuno);
}
cursor.close();
//关闭数据库连接
db.close();
}
/**
* 查询全部
*
*/
public void getOne(String stuname){
//获取数据
SQLiteDatabase db = helper.getReadableDatabase();
String sql="select _id,name,gender,stuno from students where name=?";
String[] selectionArgs = {stuname};
//执行SQL
Cursor cursor = db.rawQuery(sql, selectionArgs);
while(cursor.moveToNext()){
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
String stuno = cursor.getString(cursor.getColumnIndex("stuno"));
Log.i(TAG, "_id:"+_id+"name:"+name+",gender:"+gender+",stuno:"+stuno);
}
cursor.close();
//关闭数据库连接
db.close();
}
}
测试类
/**
* 测试传统方式数据库工具类
* @author 刘楠
*
* 2016-2-20下午12:48:37
*/
public class TestStudentDao extends AndroidTestCase{
private StudentDao studentDao;
@Override
protected void setUp() throws Exception {
studentDao = new StudentDao(getContext());
}
/**
* 测试插入
*/
public void testInsert(){
studentDao.insert("lisi", "man", "heimaAndroid2179");
}
/**
* 测试插入
*/
public void testDelete(){
studentDao.delete("liunan");
}
/**
* 测试修改
*/
public void testUpdate(){
studentDao.update("lisi", "女", "33");
}
/**
* 测试查询全部
*/
public void testGetAll(){
studentDao.getAll();
}
/**
* 测试查询一个
*/
public void testGetOne(){
studentDao.getOne("lisi");
}
}
3.数据版本判断与更新
/**
* 数据库创建类
* @author 刘楠
*
* 2016-2-20上午10:04:34
*/
public class DbSqliteOpenHelper extends SQLiteOpenHelper {
private static final String TAG = "DbSqliteOpenHelper";
/**
*
* @param context 上下文
* @param name 数据库的名字如: students.db
* @param factory 游标工厂 ,类似JDBC中的ResultSet中的hasNext();
* @param version 数据库的版本 这里的版本必须大于0,如果为0就会报错
*/
public DbSqliteOpenHelper(Context context) {
super(context, "student.db", null,4);
}
/**
* 当数据库被创建时,执行,
* 只会执行一次
* 第二闪运行是就不会执行了
*/
@Override
public void onCreate(SQLiteDatabase db) {
int version = db.getVersion();
Log.i(TAG, "version:"+version);
Log.i(TAG, "onCreate 方法执行了");
if(version==0){
db.execSQL("create table students(_id integer primary key autoincrement, name varchar(30),gender varchar(10),stuno varchar(50))");
Log.i(TAG, "version=0执行了");
}else{
//创建数据库表
//sql create table students(_id integer primary key, name varchar(30))
db.execSQL("create table students(_id integer primary key autoincrement, name varchar(30))");
Log.i(TAG, "version不等0执行了");
}
}
/**
* 当数据版本升级时执行,
* 数据版本只能升不能降 从1开始
* 这里常用于更改数据库中的表的结构,如添加列,删除列,之类的,创建新的表
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "onUpgrade 方法执行了");
Log.i(TAG, oldVersion+"");
Log.i(TAG, newVersion+"");
//算出新 旧版本的差
int difference = newVersion-oldVersion;
switch (difference) {
case 1:
db.execSQL("alter table students add gender varchar(10)");
Log.i(TAG, difference+"");
break;
case 2:
db.execSQL("alter table students add gender varchar(10))");
db.execSQL("alter table students add stuno varchar(50))");
Log.i(TAG, difference+"");
break;
default:
break;
}
}
}
4.使用Android提供的API来操作数据库
/**
* 使用Android中的API来执行操作数据库
*
* @author 刘楠
*
* 2016-2-20下午12:19:16
*/
public class StudentDao2 {
private static final String TAG = "StudentDao2";
/*
* 操作数据库类
*/
private DbSqliteOpenHelper helper;
public StudentDao2(Context context) {
helper = new DbSqliteOpenHelper(context);
}
/**
* 插入方法
*
* @param name
* 姓名
* @param gender
* 性别
* @param stuno
* 学号
*/
public long insert(String name, String gender, String stuno) {
// 获取数据
SQLiteDatabase db = helper.getWritableDatabase();
// 填充占位符
ContentValues values = new ContentValues();
values.put("name", name);
values.put("gender", gender);
values.put("stuno", stuno);
String nullColumnHack = "values(null,?,?,?)";
// 执行SQL
long insert = db.insert("students", nullColumnHack, values);
// 关闭数据库连接
db.close();
return insert;
}
/**
* 修改更改 update
*
* @param name
* 姓名
* @param gender
* 性别
* @param stuno
* 学号
*/
public int update(String name, String gender, String stuno) {
// 获取数据
SQLiteDatabase db = helper.getWritableDatabase();
String sql = "update students set gender=?,stuno=? where name=?";
// 填充占位符
ContentValues values = new ContentValues();
values.put("gender", gender);
values.put("stuno", stuno);
// 执行SQL
int update = db.update("students", values, " name=?", new String[]{name});
// 关闭数据库连接
db.close();
return update;
}
/**
* 删除
*
* @param name
* 姓名
*/
public int delete(String name) {
// 获取数据
SQLiteDatabase db = helper.getWritableDatabase();
// 执行SQL
int delete = db.delete("students", " name=?", new String[]{name});
// 关闭数据库连接
db.close();
return delete;
}
/**
* 查询全部
*
*/
public void getAll() {
// 获取数据
SQLiteDatabase db = helper.getReadableDatabase();
String sql = "select _id,name,gender,stuno from students";
// 执行SQL
Cursor cursor = db.query("students", new String[]{"_id","name","gender","stuno"}, null, null, null, null, null);
while (cursor.moveToNext()) {
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
String stuno = cursor.getString(cursor.getColumnIndex("stuno"));
Log.i(TAG, "_id:" + _id + "name:" + name + ",gender:" + gender
+ ",stuno:" + stuno);
}
cursor.close();
// 关闭数据库连接
db.close();
}
/**
* 查询全部
*
*/
public void getOne(String stuname) {
// 获取数据
SQLiteDatabase db = helper.getReadableDatabase();
// 执行SQL
Cursor cursor = db.query("students", new String[]{"_id","name","gender","stuno"}, "name =?", new String[]{stuname}, null, null, null);
while (cursor.moveToNext()) {
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
String stuno = cursor.getString(cursor.getColumnIndex("stuno"));
Log.i(TAG, "_id:" + _id + "name:" + name + ",gender:" + gender
+ ",stuno:" + stuno);
}
cursor.close();
// 关闭数据库连接
db.close();
}
}
测试
/**
* 测试传统方式数据库工具类
* @author 刘楠
*
* 2016-2-20下午12:48:37
*/
public class TestStudentDao2 extends AndroidTestCase{
private static final String TAG = "TestStudentDao2";
private StudentDao2 studentDao2;
@Override
protected void setUp() throws Exception {
studentDao2 = new StudentDao2(getContext());
}
/**
* 测试插入
*/
public void testInsert(){
long result = studentDao2.insert("lisi", "man", "heimaAndroid2179");
Log.i(TAG, result+"");
}
/**
* 测试插入
*/
public void testDelete(){
int delete = studentDao2.delete("aa");
Log.i(TAG, delete+"");
}
/**
* 测试修改
*/
public void testUpdate(){
int update = studentDao2.update("lisi", "hh", "33");
Log.i(TAG, update+"");
}
/**
* 测试查询全部
*/
public void testGetAll(){
studentDao2.getAll();
}
/**
* 测试查询一个
*/
public void testGetOne(){
studentDao2.getOne("gh");
}
}
5.创建一个学生信息录入,使用ListView展示信息baseAdapter



布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="学生信息管理系统"
android:textColor="#77ff0000"
android:textSize="29sp" />
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入学生姓名" />
<!-- 性别 -->
<RadioGroup
android:id="@+id/rgp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- 性别男 -->
<RadioButton
android:id="@+id/rb_male"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="male" />
<!-- 性别女 -->
<RadioButton
android:id="@+id/rb_female"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="female" />
</RadioGroup>
<!-- 保存 -->
<Button
android:id="@+id/btn_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="保存" />
<!-- 查询 -->
<Button
android:id="@+id/btn_querty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询全部学生信息" />
<ListView
android:id="@+id/lv_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#ff0000"
android:dividerHeight="2dp">
</ListView>
</LinearLayout>
ListView要使用的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/iv_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_margin="20dp"
android:src="@drawable/mr" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:layout_toRightOf="@id/iv_sex" >
<TextView
android:id="@+id/tv_no"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="学号" />
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_no"
android:text="姓名" />
<ImageView
android:id="@+id/iv_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_margin="20dp"
android:src="@drawable/delete" />
</RelativeLayout>
</RelativeLayout>
数据库创建类
/**
* 数据库创建类,与维护的类 继承SQLiteOpenHelper
* @author 刘楠
*
* 2016-2-20下午6:32:00
*/
public class StudentSqliteOpenHelper extends SQLiteOpenHelper {
private static final String TAG = "StudentSqliteOpenHelper";
public StudentSqliteOpenHelper(Context context) {
super(context, "student.db", null, 2);
}
/**
* 创建数据库时,执行一次,只执行一次
* 用来创建数据表
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.i(TAG, "onCreate执行了");
//获取原来的版本,获取不到为0
int version = db.getVersion();
if(version==0){
//创建表
String sql= "create table students ( _id integer primary key autoincrement, name varchar(30),gender varchar(10))";
db.execSQL(sql);
}else{
//创建表
String sql= "create table students ( _id integer primary key autoincrement, name varchar(30))";
db.execSQL(sql);
}
}
/**
* 当数据库版本发生变化时执行
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(TAG, "onUpgrade执行了");
switch (oldVersion) {
case 1:
String sql= "alter table students add gender varchar(10)";
db.execSQL(sql);
break;
case 2:
break;
default:
break;
}
}
}
实体类
/**
* 学生的封装类
*
* @author 刘楠
*
* 2016-2-20下午6:31:20
*/
public class Student {
/*
* ID
*/
private int id;
/*
* 姓名
*/
private String name;
/*
* 性别
*/
private String gender;
public Student() {
super();
}
public Student(int id, String name, String gender) {
super();
this.id = id;
this.name = name;
this.gender = gender;
}
public String getGender() {
return gender;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
数据库工具类
/**
* 学生数据库访问工具类
*
* @author 刘楠
*
* 2016-2-20下午6:45:03
*/
public class StudentDao {
/*
* 数据库创建更新类
*/
private StudentSqliteOpenHelper helper;
public StudentDao(Context context) {
helper = new StudentSqliteOpenHelper(context);
}
/**
* 插入一条记录
*
* @param name
* 姓名
* @param gender
* 性别
* @return 返回插入后的_id
*/
public long insert(String name, String gender) {
// 获取数据库
SQLiteDatabase db = helper.getWritableDatabase();
// 插入的列
String nullColumnHack = "values(null,?,?)";
// 占位符
ContentValues values = new ContentValues();
values.put("name", name);
values.put("gender", gender);
// 执行
long insert = db.insert("students", nullColumnHack, values);
// 关闭连接
db.close();
return insert;
}
/**
* 修改一条记录
*
* @param name
* 姓名
* @param gender
* 性别
* @return 返回插入后的_id
*/
public long update(String name, String gender) {
// 获取数据库
SQLiteDatabase db = helper.getWritableDatabase();
// 插入的列
// 占位符
ContentValues values = new ContentValues();
values.put("gender", gender);
// 执行
int update = db.update("students", values, "name = ?",
new String[] { name });
// 关闭连接
db.close();
return update;
}
/**
* 删除一条记录
*
* @param name
* 姓名
*
* @return 返回删除后的_id
*/
public int delete(String name) {
// 获取数据库
SQLiteDatabase db = helper.getWritableDatabase();
// 执行
int delete = db.delete("students", "name = ?", new String[] { name });
// 关闭连接
db.close();
return delete;
}
/**
* 查询全部学生信息
*
* @return
*/
public List<Student> getAll() {
// 容器
List<Student> list = new ArrayList<Student>();
// 获取数据库
SQLiteDatabase db = helper.getReadableDatabase();
String[] columns = { "_id", "name", "gender" };
Cursor cursor = db.query("students", columns, null, null, null, null,
null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String gender = cursor.getString(cursor.getColumnIndex("gender"));
// 添加到集合中
list.add(new Student(id, name, gender));
}
// 关闭游标
cursor.close();
// 关闭
db.close();
return list;
}
}
Activity
/**
* 学生管理信息系统Activity
* 步骤
* 1.获取用户输入姓名与选择的性别
* 2.判断是否为空,为空就提示,不为空
* 3.保存数据
* 4.点击查询,在下方的ListView中显示所有的学生信息
* 5.为ListView设置BaseAdapter
* 6.实现getCount与getView方法
* 7.返回view
* 8.点击删除,弹出提示对话框,
* 9.取消什么也不做,确定就删除当前记录
* @author 刘楠
*
* 2016-2-20下午8:59:43
*/
public class MainActivity extends Activity implements OnClickListener {
/*
* 姓名
*/
private EditText et_name;
/*
* 性别
*/
private RadioGroup rgp;
/*
* 保存
*/
private Button btn_save;
/*
* 查询
*/
private Button btn_querty;
/*
* 学生列表
*/
private ListView lv_item;
/*
* 学生表数据库操作类
*/
private StudentDao studentDao;
/*
* 学生列表
*/
private List<Student> list;
/*
* 学生列表适配器
*/
private StuBaseAdapter stuBaseAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_name = (EditText) findViewById(R.id.et_name);
rgp = (RadioGroup) findViewById(R.id.rgp);
btn_save = (Button) findViewById(R.id.btn_save);
btn_querty = (Button) findViewById(R.id.btn_querty);
lv_item = (ListView) findViewById(R.id.lv_item);
/*
* 初始化数据库学生表的工具类
*/
studentDao = new StudentDao(this);
/*
* 设置监听事件
*/
btn_save.setOnClickListener(this);
btn_querty.setOnClickListener(this);
}
/**
* 单击事件监听器
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_save:
// 保存
save();
break;
case R.id.btn_querty:
// 查询
query();
break;
}
}
/**
* 查询学生列表
*/
private void query() {
refresh();
}
private void refresh() {
/*
* 查询全部学生信息
*/
list = studentDao.getAll();
if (stuBaseAdapter == null) {
// 判断 为空就new ,为ListView设置适配器
stuBaseAdapter = new StuBaseAdapter();
lv_item.setAdapter(stuBaseAdapter);
} else {
// 通知ListView列表改变
stuBaseAdapter.notifyDataSetChanged();
}
}
/**
* 保存学生信息
*/
private void save() {
// 获取学生输入的信息
String name = et_name.getText().toString().trim();
// 判断
if (TextUtils.isEmpty(name)) {
Toast.makeText(this, "学生姓名不能为空", Toast.LENGTH_SHORT).show();
return;
}
// 获取性别
String gender = "male";
switch (rgp.getCheckedRadioButtonId()) {
case R.id.rb_male:
gender = "male";
break;
case R.id.rb_female:
gender = "female";
break;
}
// 开始保存
long insert = studentDao.insert(name, gender);
if (insert > 0) {
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
et_name.setText("");
} else {
Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
}
}
/**
* 学生列表适配器
*
* @author 刘楠
*
* 2016-2-20下午7:28:15
*/
private class StuBaseAdapter extends BaseAdapter {
private static final String TAG = "StuBaseAdapter";
@Override
public int getCount() {
return list.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(TAG, position + "");
View view;
if (convertView == null) {
view = View.inflate(MainActivity.this, R.layout.stu_item, null);
} else {
view = convertView;
}
// 得到学生对象
final Student student = list.get(position);
ImageView iv_sex = (ImageView) view.findViewById(R.id.iv_sex);
if ("male".equals(student.getGender())) {
iv_sex.setImageResource(R.drawable.mr);
} else if ("female".equals(student.getGender())) {
iv_sex.setImageResource(R.drawable.miss);
}
TextView tv_no = (TextView) view.findViewById(R.id.tv_no);
tv_no.setText("编号:" + student.getId());
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
tv_name.setText("姓名:" + student.getName());
ImageView iv_delete = (ImageView) view.findViewById(R.id.iv_delete);
iv_delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 对话框来提示用户是否删除
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setTitle("删除").setIcon(R.drawable.tools)
.setMessage("确定要删除这条记录吗");
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
/*
* 删除方法
*/
int delete = studentDao.delete(student.getName());
if (delete > 0) {
Toast.makeText(MainActivity.this, "删除成功",
Toast.LENGTH_SHORT).show();
// 刷新列表
refresh();
} else {
Toast.makeText(MainActivity.this, "删除失败",
Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
builder.create().show();
}
});
return view;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
}
}
安卓第四天笔记-Sqlite的更多相关文章
- 安卓第十四天笔记-内容提供者(ContentProvider)
安卓第十四天笔记-内容提供者(ContentProvider) ContentProvider--内容提供者 1.ContentProvider简介 ContentProvider是不同应用程序之间进 ...
- 安卓第十天笔记-fragment
安卓第十天笔记-fragment Fragment(片段) 一.Fragment简介 *Fragment是3.0引入的API,主要为了解决平板,大屏幕手机显示问题 *Fragment代表了Activi ...
- 安卓第十三天笔记-服务(Service)
安卓第十三天笔记-服务(Service) Servcie服务 1.服务概念 服务 windows 服务没有界面,一直运行在后台, 运行在独立的一个进程里面 android 服务没有界面,一直运行在后台 ...
- 安卓第十一天笔记-Intent与inter-filter配置
安卓第十一天笔记-Intent与inter-filter配置 Intent与inter-filter配置 1.Intent对象简述 Android应用中有包含三种重要组件:Activity,Servi ...
- 《APUE》第四章笔记(2)
下面介绍对stat结构的各个成员的操作函数. 先贴个stat结构的图: access函数: #include <unistd.h> int access(const char *pathn ...
- 《APUE》第四章笔记(1)
1.引言 本章介绍文件系统的特征和文件的性质.从stat函数开始,逐个说明stat结构的每一个成员以了解文件的所有属性.在此过程中,还将会说明修改这些属性的各个函数,并更详细地查看UNIX文件系统的结 ...
- #Python编程从入门到实践#第四章笔记
#Python编程从入门到实践#第四章笔记 操作列表 1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...
- Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)
原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...
- iOS阶段学习第四天笔记(循环)
iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...
随机推荐
- symfony安装使用
symfony是一个强大的具有DI特性的框架,目前比较流行的php开发框架Drupal,Laravel底层都是使用了symfony. 想了解symfony更多内容,传送门 安装symfony很简单,一 ...
- Surface Shader
Surface Shader: (1)必须放在SubShdader块,不能放在Pass内部: (2)#pragma sufrace surfaceFunction lightModel [option ...
- WP8 SqlCE和SqlLite数据存储性能比较
在平时的开发中一定会用到本地数据存储,除了独立存储外我们还可以选择SqlCE和SqlLite:于是在选择上我们就必须权衡他们两者的性能择优选择. 测试代码:(这个例子是在msdn sqllite例子上 ...
- JavaScript之Array常用函数汇总
[20141121]JavaScript之Array常用功能汇总 *:first-child { margin-top: 0 !important; } body>*:last-child { ...
- 使用Html5+C#+微信 开发移动端游戏详细教程 总目录
(一).序(关于作者创业失败的感想) (二).准备工作&开发环境 (三).使用html5引擎搭建游戏框架 (四).游戏中层的概念与设计 (五).游戏图像的加载与操作 (六).游戏界面布局与性能 ...
- Webstrom (或Phpstrom)使用git(oschina-码云)
.登录"码云"(题外话,这名字起得真好),创建一个新项目 .自动进入了新项目主页,复制该git 仓库的https地址,第4步会用到 .打开Webstrom,选择chec ...
- 直接拿来用!最火的Android开源项目
GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上.更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要.利用这些项目,有时能够让你 ...
- SQL Server中的事务日志管理(3/9):事务日志,备份与恢复
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- .Net魔法堂:发个带附件的邮件
一.前言 由于工作需要最近把邮件发送封装成WebService,现在把代码记录在此,以便日后查阅. 二.二话不说写代码 private void _SendMail(string form, st ...
- SpringMVC核心——参数获取与Servlet资源获取问题
一.SpringMVC 使用 @PathVariable.@RequestParam.@RequestHeader.@CookieValue 等来解决参数获取问题. 1. @PathVariable: ...