实验二 Android数据存储实例-通讯录

实验二 Android数据存储实例-通讯录
一、实验目的
(1)熟练UI界面设计流程及方法;
(2)进一步掌握SQLite数据库的建立和操作方法;
(3)熟练Andriod数据库编程。
二、实验环境
(1) 硬件:PC 机,其它相关硬件 ;
(2)软件:Windows XP,Android Studio集成开发环境,Android Development Tools插件。
三、实验内容及 要求
(1)掌握界面布局;
(2)熟练SQLite数据库的创建与操作编程;
(3)熟练ListView控件的使用;
(4)完成手机通讯录的编程设计与调试。
四、实验步骤
本次实验我们将在Android上完成一个通讯录的功能。首先我们将确定要实现的这个通讯录有什么样的功能,比如:浏览联系人、添加联系人、删除联系人、编辑联系人、查看联系人,当找到一个联系人之后,可以呼叫或者发送短信息给该联系人。确定了这些功能之后,再来思考需要使用哪些知识,比如:要存储很多联系人,可以使用数据库,以方便管理和维护。在确定之后,就可以开始新建工程了。
1、UI设计
在设计界面时,需要根据所定的功能来设计,本节中我们浏览联系人是通过一个List来展示给用户的,如图1所示;用户需要操作,所以需要设计供用户操作的选项,如添加、查询等,图2和图3分别是长按联系人的菜单和直接点击联系人的效果。
在这里插入图片描述
在这里插入图片描述
在完成了这些基本功能的设计之后,需要设计添加和修改联系人的界面。这样的布局很简单,可以通过TextView来显示一个标签,比如:姓名、电话等。既然要编辑肯定需要接收用户的输入,所以这里使用了EditText来供用户输入信息,如图3所示;在修改之后可以在当前界面查看联系人的信息,如图4所示。
在这里插入图片描述
在这里插入图片描述
2、数据库设计
对于联系人信息的存储,可以使用Android中提供的数据库。要设计数据库,首先要确定数据都是什么内容,为了方便管理、维护和共享,首先将数据库中要使用的数据全部定义到DBdao类,该例中定义的数据信息在文件DBdao.java中;其中联系人信息数据封装到Person类中,其代码清单如下所示。

//定义数据
public class Person implements Serializable {
   
    private String DEFAULT="No record";
    /*姓名*/
    private String name;
    /*联系电话*/
    private String tel;

    public String getAddr() {
   
        return addr;
    }
    public void setAddr(String addr) {
   
        if (addr.trim().length()==0){
   
            this.addr=DEFAULT;
        }
        this.addr = addr;
    }
    public String getName() {
   
        return name;
    }
    public void setName(String name) {
   
        this.name = name;
    }
    public String getTel() {
   
        return tel;
    }
    public void setTel(String tel) {
   
        this.tel = tel;
    }

    public String getEmail() {
   
        return email;
    }
    public void setEmail(String email) {
   
        if (email.trim().length()==0){
   
         this.email=DEFAULT;
        }else {
   
            this.email = email;
        }
    }
    public String getRemarks() {
   
        return remarks;
    }

    public void setRemarks(String remarks) {
   
        //如果空串,设为默认
        if (remarks.trim().length()==0) {
   
            this.remarks=DEFAULT;
        }else {
   
            this.remarks = remarks;
        }
    }
    public void setHeadPickture(Bitmap headPickture) {
   
        this.headPickture = headPickture;
    }
    /*住址*/
    private String addr;
    /*电子邮件*/
    private String email;
    /*备注*/
    private String remarks;
    /*头像*/
    private Bitmap headPickture;
}

Android中的android.database.sqlite.SQLiteOpenHelper类是一个专门用于数据库创建和版本管理的辅助类。因此,为了更好地管理数据库,这里我们创建一个继承自SQLiteOpenHelper的辅助类DBdao来维护和更新数据库,并实现数据库的增、删、查、改操作,其代码清单下所示。

/* 提供数据库的 增 删 改 查 四种方法*/
public class DBdao extends SQLiteOpenHelper{
   
    private  static  final String DB_NAME ="TXL.db";
    private static final String TABLE_NAME = "person";
    private  static  int  DB_VERSION =1;
    private  SQLiteDatabase db;
    private Context context;
    /*全局persons容器*/
    public static  final List<Person> persons = new ArrayList<Person>();
    /*构建表结构,初始化表*/
    private static final String CREATETABLE="create table if not exists person(" +
             "tel text  primary key not null,"+
             "name text,"+
             "addr text, "+
             "email text ,"+
             "remarks text)";
    public DBdao(Context context) {
   
        super(context,DB_NAME,null,DB_VERSION);
        this.context = context;
        db = getWritableDatabase();//建立数据库
    }
    //打开SQLite数据库连接
    public SQLiteDatabase openConnection(){
   

        db = getWritableDatabase();
        return db;
    }


    //关闭数据库连接,只有一个连接在外面
    public void closeConnection(){
   
        db.close();
    }
    //创建表
    public boolean creatTable(String createTableSql){
   
        try {
   
            openConnection();
            db.execSQL(createTableSql);

        }catch (Exception e){
   

           e.printStackTrace();
            return false;

        }finally {
   
            closeConnection();
        }

        return  true;
    }


    //添加数据
    public boolean save(Person person/*String tableName,ContentValues context*/){
   

        String tableName=TABLE_NAME;

        ContentValues context=new ContentValues();

        context.put("name",person.getName().trim());
        context.put("tel",person.getTel().trim());
        context.put("addr",person.getAddr().trim());
        context.put("email",person.getEmail().trim());
        context.put("remarks",person.getRemarks().trim());

        try {
   
            openConnection();
            db.insert(tableName,null,context);

        }catch (Exception e){
   

            e.printStackTrace();
            return false;

        }finally {
   
            closeConnection();
        }
        return true;
    }

    //修改数据
    public boolean update(Person p){
   
        /*String tableName,ContentValues contentValues,String whereClause,String []whereArgs*/

        ContentValues contentValues = new ContentValues();

        contentValues.put("name"/*表的字段名*/,p.getName().trim()/*该字段对应的值*/);

        contentValues.put("tel",p.getTel().trim());
        contentValues.put("addr",p.getAddr().trim());
        contentValues.put("email",p.getEmail().trim());
        contentValues.put("remarks",p.getRemarks().trim());

        /*
        * 问号出现的次序和String[]表中下标一一对应,从0开始
        * 例如:
        * 第一个问号,对应String[]中下标为 0 的元素
        * 第二个问号,对应String[]中下标为 1 的元素
        * */
        String whereClause = "name=?";
        String []whereArgs=new String[]{
   p.getName().trim()};

        try {
   
            openConnection();
            db.update(TABLE_NAME,contentValues,whereClause,whereArgs);

        }catch (Exception e){
   

            e.printStackTrace();
            return false;

        }finally {
   
            closeConnection();
        }
        return true;

    }

    //删除数据
    public boolean delete(String condition){
   

        String[] obj=new String[]{
   condition};
        String delSql="tel=?";

        
  • 8
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值