
本次项目主要实现了联系人信息(姓名和电话)的增加、删除、修改和查询功能。主要用到sqliteDatabase来存储数据,sqlite数据库和其他的sql数据库不同, 我们并不需要在手机上另外安装一个数据库软件,AndroID系统已经集成了这个数据库。我们下面会详细介绍sqlite数据库。
二、开发环境开发环境还是老样子哈,JDK选择1.8版本,API选28,AndroID Studio版本最好是3.6.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.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){ } 5、实现增删改查上述代码第一次启动应用,我们会创建这个dzh.db的文件,并且会执行onCreate()里的方法, 创建一个person的表,它有两个字段:主键personID和name字段;接着如果我们修改db的版本号,那么下次启动就会调用onUpgrade()里的方法,这里我们没有去填写方法,感兴趣的小伙伴可以试一下!
本项目直接使用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实现通讯录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)