Android Studio实现通讯录

Android Studio实现通讯录,第1张

概述项目目录一、项目概述二、开发环境三、详细设计1、登录界面的搭建2、注册界面的搭建3、好友列表界面的搭建4、跳转功能实现四、项目效果五、项目总结六、源码下载一、项目概述本次项目主要实现了联系人信息(姓名和电话)的增加、删除、修改和查询功能。主要用到SQLiteDatabase来存储数据,二、开发环境三、详细设计1、登录界面的搭建整体布局是相对布局RelativeLayout,上来ImageView是头像框,下面一个LinearLayout,显示的账号TextView和EditText;紧接着还是

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

一、项目概述

本次项目主要实现了联系人信息(姓名和电话)的增加、删除、修改和查询功能。主要用到sqliteDatabase来存储数据,sqlite数据库和其他的sql数据库不同, 我们并不需要在手机上另外安装一个数据库软件,AndroID系统已经集成了这个数据库。我们下面会详细介绍sqlite数据库。

二、开发环境

开发环境还是老样子哈,JDK选择1.8版本,API选28,AndroID Studio版本最好是3.6.1。

三、详细设计 1、界面的搭建

整体布局是线性布局linearLayout。我设置了页边距:androID:padding=“10dp”,orIEntation方向选择的也是vertical垂直方式。下面先是放置了一个小的linearLayout,里面是一个文本框和一个输入框,代表姓名。紧接着再放一个linearLayout,里面也是一个文本框加一个输入框,表示电话号码。这是每个项目都常见的基本设计了。代码如下:

    <linearLayout        androID:layout_margintop="130dp"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content">        <TextVIEw            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="姓 名:"            androID:textSize="28sp"/>        <EditText            androID:ID="@+ID/et_name"            androID:layout_wIDth="match_parent"            androID:layout_height="wrap_content"            androID:hint="请输入姓名"            androID:textSize="26sp"/>    </linearLayout>    <linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:layout_marginBottom="10dp">        <TextVIEw            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="电 话:"            androID:textSize="28sp"/>        <EditText            androID:ID="@+ID/et_phone"            androID:layout_wIDth="match_parent"            androID:layout_height="wrap_content"            androID:hint="请输入电话号码"            androID:textSize="26sp"/>    </linearLayout>

下面是四个按钮,我设置了四种颜色区分它。这里我让四个按钮的宽度平分父布局,将这四个按钮的wIDth都设为0dp,然后将weight都设置为1就可以实现。

<linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:layout_margintop="50dp">        <button            androID:ID="@+ID/btn_add"            androID:layout_wIDth="0dp"            androID:layout_height="wrap_content"            androID:layout_marginRight="2dp"            androID:layout_weight="1"            androID:background="#7CFC00"            androID:text="添加"            androID:textSize="18sp"/>        <button            androID:ID="@+ID/btn_query"            androID:layout_wIDth="0dp"            androID:layout_height="wrap_content"            androID:layout_marginRight="2dp"            androID:layout_weight="1"            androID:background="#DCB5FF"            androID:text="查询"            androID:textSize="18sp"/>        <button            androID:ID="@+ID/btn_update"            androID:layout_wIDth="0dp"            androID:layout_height="wrap_content"            androID:layout_marginRight="2dp"            androID:layout_weight="1"            androID:background="#97FFFF"            androID:text="修改"            androID:textSize="18sp"/>        <button            androID:ID="@+ID/btn_delete"            androID:layout_wIDth="0dp"            androID:layout_height="wrap_content"            androID:layout_marginRight="2dp"            androID:layout_weight="1"            androID:background="#ACD6FF"            androID:text="删除"            androID:textSize="18sp"/>    </linearLayout>

最底下还有一个隐着的TextVIEw,它是用来显示查询到的联系人信息。

<TextVIEw        androID:ID="@+ID/tv_show"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:layout_margintop="50dp"        androID:textSize="20sp"/>

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 @R_502_6843@increment, 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 @R_502_6843@INCREMENT,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方法,下面我们用项目中的这部分增删改查的代码来演示下这些API的用法。

 @OverrIDe    public voID onClick(VIEw v){        String name,phone;//声明姓名和电话字段        sqliteDatabase db;//声明一个数据库db        ContentValues values;//创建values对象        switch (v.getID()){            case R.ID.btn_add://添加数据                name=mEtname.getText().toString();//获取字符串数据                phone=mEtPhone.getText().toString();                db=myHelper.getWritableDatabase();//获取可读写sqliteDatabase对象                values=new ContentValues();//创建ContentValues值                values.put("name",name);//将数据添加到ContentValues对象                values.put("phone",phone);                //参数依次是:表名,强行插入null值的数据列的列名,一行记录的数据                db.insert("person",values);//将数据插入到表中                Toast.makeText(this,"信息已添加",Toast.LENGTH_SHORT).show();//提示信息                db.close();//关闭数据库                break;            case R.ID.btn_query://查询数据                db=myHelper.getReadableDatabase();                //参数依次是:表名,列名,where约束条件,where中占位符提供具体的值,指定group by的列,进一步约束                Cursor cursor=db.query("person",                null,null);//声明并打开游标                if(cursor.getCount()==0){//获得总的数据条数                    mTvShow.setText(" ");                    Toast.makeText(this,"没有数据",Toast.LENGTH_SHORT).show();                }else {                    cursor.movetoFirst();//指针移动到第一行,成功返回true,也说明有数据                    mTvShow.setText("name: "+cursor.getString(1)+                        " ;Tel: "+cursor.getString(2));                }                while (cursor.movetoNext()){//指针移动到下一行,表明还有元素                    mTvShow.append("\n"+"name:"+cursor.getString(1)+                        " ;Tel: "+cursor.getString(2));                }                cursor.close();//关闭游标                db.close();                break;            case R.ID.btn_update://修改数据                db=myHelper.getReadableDatabase();                values=new ContentValues();//要修改的数据                values.put("phone",phone=mEtPhone.getText().toString());                //参数依次是表名,修改后的值,where条件,以及约束,如果不指定三和四两个参数,会更改所有行                db.update("person",values,"name=?",                        new String[]{mEtname.getText().toString()});//更新并得到行数                Toast.makeText(this,"信息已修改",Toast.LENGTH_SHORT).show();                db.close();                break;            case R.ID.btn_delete://删除数据                db=myHelper.getWritableDatabase();                //参数依次是表名,以及where条件与约束                db.delete("person",null);                Toast.makeText(this,"信息已删除",Toast.LENGTH_SHORT).show();                mTvShow.setText(" ");                db.close();                break;        }    }
四、项目效果

1、运行模拟器,启动应用


2、输入姓名和电话,点击添加按钮,显示信息已添加


3、点击查询按钮,发现底下出现已有联系人的信息(因为背景看不清)


4、点击修改按钮,修改已有联系人的信息,将姓名由DZH改为SH,d出“修改信息成功”的提示信息


5、点击删除按钮,将显示的联系人信息删除,然后点击查询按钮,因为没有联系人数据,d出“没有数据”的提示信息


6、添加三条新的数据进去,然后查询,可以看到显示了三条记录


7、不要关掉模拟器,在右侧Device file Explorer中找到data文件夹,然后在data文件夹下找到zj.dzh.directory文件夹,继续展开文件夹


找到databases文件夹,有个dzh.db,就是我们创建的数据库,将它保存到本地


8、使用sqlite图形化工具查看db文件,推荐用sqlite Expert Professional打开刚刚的db文件,就会发现有张person表,下面显示了三条联系人记录

五、项目总结

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

六、源码下载

需要源码学习的同学可以关注我的微信公众号,回复:通讯录,即可获取源码,还有很多AndroID项目等你来学习。

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

总结

以上是内存溢出为你收集整理的Android Studio实现通讯录全部内容,希望文章能够帮你解决Android Studio实现通讯录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1119381.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存