项目目录

一、项目概述

本次项目主要实现了对联系人信息(姓名和电话)的增加、删除、修改和查询功能,在删除和修改用户前,可以通过姓名搜索到指定联系人的信息,方便用户操作。通过SQLiteDatabase来存储数据,SQLite数据库和其他的SQL数据库不同, 我们并不需要在手机上另外安装一个数据库软件,Android系统已经集成了这个数据库,功能非常强大,而且使用也很方便快捷。我们下面会详细介绍SQLite数据库。

二、开发环境

开发环境还是老样子哈,Android Studio版本3.6.1及以上都可以顺利运行。

Android Studio实现通讯录项目_android

三、详细设计

1、主界面的搭建

最外层布局采用线性布局LinearLayout。orientation方向选择的也是vertical垂直排列。下面先是放置了一个小的LinearLayout,里面先放一个文本框来显示标题,再放一个图片框,显示图标。然后不断调整内外边距,找到最合适的位置。

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="通讯录"
android:textSize="40sp"
android:textStyle="bold"
android:textColor="@color/DarkCyan"
android:layout_margin="20dp"
android:gravity="center"/>

<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/contact"
android:layout_marginBottom="10dp"
android:layout_gravity="center"/>

下面是四个操作按钮,id分别以它们的功能命名,其实四个按钮除了id和text内容不同,其他都是一样的,背景background选择的是写好的btn_selector,在其中设置了按钮的外边框和弧度,而且按钮按下时会有相应的颜色变化。

<Button
android:id="@+id/main_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加联系人"
android:gravity="center"
android:textColor="@color/Honeydew"
android:background="@drawable/btn_selector"
android:textSize="20sp"
android:layout_margin="10dp"/>
<Button
android:id="@+id/main_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除联系人"
android:gravity="center"
android:textColor="@color/Honeydew"
android:background="@drawable/btn_selector"
android:textSize="20sp"
android:layout_margin="10dp"/>
<Button
android:id="@+id/main_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改联系人"
android:gravity="center"
android:textColor="@color/Honeydew"
android:background="@drawable/btn_selector"
android:textSize="20sp"
android:layout_margin="10dp"/>

<Button
android:id="@+id/main_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询联系人"
android:gravity="center"
android:textColor="@color/Honeydew"
android:background="@drawable/btn_selector"
android:textSize="20sp"
android:layout_margin="10dp"/>

我们看下主界面的示意图:

Android Studio实现通讯录项目_sqlite_02

2、SQLite数据库

2.1、SQLite是什么?

SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持标准SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非常方便!Android内置的SQLite是SQLite 3版本的。

2.2、为什么要用SQLite?

前面我们学习了使用文件与SharedPreference来保存数据,但是在很多情况下,文件并不一定是有效的,如多线程并发访问是相关的;app要处理可能变化的复杂数据结构等等。比如银行的存钱与取钱!使用前两者就会显得很无力或者繁琐,数据库的出现可以解决这种问题,而Android又给我们提供了这样一个轻量级的SQLite,那肯定要好好用啊。

2.3、SQLite有什么特点?

SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象) 虽然只有五种,但是对于varchar,char等其他数据类型都是可以保存的;因为SQLite有个最大的特点:

你可以将各种数据类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。

比如你可以在Integer类型的字段中存放String字符串,当然除了声明为主键INTEGER PRIMARY KEY的字段只能够存储64位整数。

另外,SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息。如下面语句会忽略 name字段的类型信息:

CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))

SQlite通过文件来保存数据库,一个文件就是一个数据库,数据库中又包含多个表格,表格里又有 多条记录,每个记录由多个字段构成,每个字段有对应的值,每个值我们可以指定类型,也可以不指定 类型(主键除外)

3、SQLite相关的类

3.1、SQLiteOpenHelper

抽象类,我们通过继承该类,然后重写数据库创建以及更新的方法, 我们还可以通过该类的对象获得数据库实例,或者关闭数据库。

3.2、SQLiteDatabase

数据库访问类:我们可以通过该类的对象来对数据库做一些增删改查的操作。最核心的类!

3.3、Cursor

游标,有点类似于JDBC里的resultset,结果集!可以简单理解为指向数据库中某 一个记录的指针。

4、创建数据库与版本管理

Android给我们提供了SQLiteOpenHelper的两个方法:onCreate( )与onUpgrade( )来实现

onCreate(database):首次使用软件时生成数据库表。

onUpgrade(database,oldVersion,newVersion):在数据库的版本发生变化时会被调用, 一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的。

class MyHelper extends SQLiteOpenHelper{
public MyHelper(Context context){
super(context,"dzh.db",null,1);//数据库文件夹名为dzh.db
}
//数据库第一次创建时被调用
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE person(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),phone VARCHAR(20))");
}
//软件版本号发生改变时调用
@Override
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){

}


上述代码第一次启动应用,我们会创建这个dzh.db的文件,并且会执行onCreate()里的方法, 创建一个person的表,它有两个字段:主键personId和name字段;接着如果我们修改db的版本号,那么下次启动就会调用onUpgrade()里的方法,这里我们没有去填写方法,感兴趣的小伙伴可以试一下!这就是创建数据库的模板代码!


5、实现增删改查

本项目使用Android给我们提供的操作数据库的一些API方法,先将它们集成在ContactsDao中,然后在增删改查四个Activity中,直接调用对应方法即可。下面教大家如何使用数据库进行增删改查操作:

  • 首先打开数据库,想要访问数据库,第一步肯定先打开。
//打开数据库
public void open() throws SQLException {
myDBOpenHelper=new MyDBOpenHelper(context);
try {
sqLiteDatabase=myDBOpenHelper.getWritableDatabase();
}catch (SQLException e){
sqLiteDatabase=myDBOpenHelper.getReadableDatabase();
}
}
  • 有开就有关,在操作完数据库后记得关闭数据库。
//关闭数据库
public void close(){
if(sqLiteDatabase!=null){
sqLiteDatabase.close();
sqLiteDatabase=null;
}
}
  • 添加数据,想要添加数据就是通过values的键值对进行插入数据。
//添加联系人
public long addContacts(Contacts c){
//先创建集合对象
ContentValues values=new ContentValues();
//插入键值对
values.put("name",c.name);
values.put("phone",c.phone);
return sqLiteDatabase.insert("contacts",null,values);
}
  • 删除数据,肯定是根据主键来删除对应的记录,用的是where约束。
//删除联系人
public int deleteContacts(Contacts c){
return sqLiteDatabase.delete("contacts","name=?",new String[]{String.valueOf(c.name)});
}
  • 修改数据,也是通过where约束找到对应键的记录,然后修改它的其他非键属性。
//修改联系人
public int updateContacts(Contacts c){
ContentValues value=new ContentValues();
value.put("phone",c.phone);
return sqLiteDatabase.update("contacts",value,"name=?",new String[]{String.valueOf(c.name)});
}
  • 查询数据,使用cursor游标,从第一行遍历到最后一行,在遍历每一行记录中,获得到每个字段的值,这样就获取到所有对象的数据了。
//根据姓名查找联系人
public Contacts getContacts(String name){
Cursor cursor=sqLiteDatabase.query("contacts",null,"name=?",new String[]{name},null,null,null);
Contacts contacts=new Contacts();
while(cursor.moveToNext()){
contacts.name=cursor.getString(cursor.getColumnIndex("name"));
contacts.phone=cursor.getString(cursor.getColumnIndex("phone"));
}
return contacts;
}

四、项目效果

通讯录的运行演示视频如下:


Android Studio实现一个简单的通讯录

五、项目总结

本次通讯录项目主要考验学生对于SQLite数据库的使用,还是比较基础的,刚接触Android不久的同学只要动手打一遍就掌握了。这些数据库知识点在今后的Android项目中会经常使用,因此希望大家能够熟练掌握SQLite的使用,方便后续开发项目。

六、源码下载

点击右侧链接,即可下载源码:Android Studio实现通讯录项目

还可以关注我的公众号《萌新加油站》,后台回复:通讯录



这凡尘到底有什么可留恋的?
原来,都是这些小欢喜啊。
它们在我的生命里唱着歌,跳着舞。
活着,也就成了一件特别让人不舍的事情。
2016.3.12 17:34 YXN