你的位置:首页 > 操作系统

[操作系统]安卓第四天笔记


安卓第四天笔记-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 ="http://schemas.android.com/apk/res/android"  ="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要使用的布局

 

<??><RelativeLayout ="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;       }    } }