我的快乐小窝 > 旧信息 >Android Studio实现通讯录项目

Android Studio实现通讯录项目

项目目录

  • 一、项目概述
  • 二、开发环境
  • 三、详细设计
    • 1、主界面的搭建
    • 2、SQLite数据库
      • 2.1、SQLite是什么?
      • 2.2、为什么要用SQLite?
      • 2.3、SQLite有什么特点?
    • 3、SQLite相关的类
      • 3.1、SQLiteOpenHelper
      • 3.2、SQLiteDatabase
      • 3.3、Cursor
    • 4、创建数据库与版本管理
    • 5、实现增删改查
  • 四、项目效果
  • 五、项目总结
  • 六、源码下载

一、项目概述

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

二、开发环境

开发环境还是老样子哈,Android Studio版本3.6.1及以上都可以顺利运行。
在这里插入图片描述

三、详细设计

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"/>

我们看下主界面的示意图:
在这里插入图片描述

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实现通讯录项目👈

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


🚀这有你错过的精彩内容

  • Android Studio实现选课系统

  • Android Studio实现校园二手交易系统

  • Android Studio实现仓库管理系统

  • Android Studio实现记事本项目

  • Android Studio如何实现音乐播放器

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

本文来自网络,不代表本站立场,转载请注明出处:https://51.wxwx.cc/index.php?m=content&c=index&a=show&catid=392&id=235903

我的快乐小窝,知识百科

我的快乐小窝后续将为您提供丰富、全面的关于我的快乐小窝,知识百科内容,让您第一时间了解到关于我的快乐小窝,知识百科的热门信息。小编将持续从百度新闻、搜狗百科、微博热搜、知乎热门问答以及部分合作站点渠道收集和补充完善信息。