安卓——之ListView和SQLite数据库写一个联系人-阿里云开发者社区

开发者社区> 小江同志> 正文

安卓——之ListView和SQLite数据库写一个联系人

简介: 安卓的数据存储分为五大类:SharedPreferences存储、文件存储(内部存储、外部SD卡存储)、SQLite数据显卡存储、 ContentProvider 、网络存储。
+关注继续查看

安卓的数据存储分为五大类:SharedPreferences存储、文件存储(内部存储、外部SD卡存储)、SQLite数据显卡存储、 ContentProvider 、网络存储。

SharedPreferences:它是Android提供的用来存储一些简单的配置信息的一种机制,采用XML格式将数据存储到设备中,常应用于存储程序的各种配置信息,如用户名、密码。可应用于登陆的记住密码。

SQLite数据库:是Android自带的一个轻量级数据库。

文件存储:主要就是Java的IO流操作,不过要注意权限的设置。

最近写了一个安卓作业,要实现添加联系人删除联系人查找联系人并进行SQLite数据库操作。

中途踩到了些许坑:

1.数据库中id是自动增长的,而且id一旦创建是不会改变的,这就导致在删除操作时出现点击获取的动态id无法匹配数据库中静态的id以至于从数据库删除数据失败。

2.本人喜欢自定义设计界面分布及色调,但在自定义对话框时,由于对话框最后调用了dismiss()方法销毁视图,导致获取的数据传过去主界面就变成了null数据。

更新坑点:3.这个坑点是等我写完文章的第二天才测试到的。。。就是在删除完数据之后再继续添加联系人的话数据的id是自动增长的,就意味着原来数据库里有3条数据,然后删除id为2的数据,此时数据库id修改为1,2,但我再插入一条数据时由于id是自动增长的,所以此时插入的数据id就变成4了。。。

亮点:程序实现了第一次登陆之后的每次登陆都自动访问数据库显示之前存储的联系人信息。

接下来直接开始一步步实现功能了,首先创建一个数据库类。

img_0fd8e968a24433cbf6e8f9a667a39de9.png
MyHelper类

针对第一个坑我采用此解决方案:当开始删除数据库数据时,把id大于当前删除数据的id都update往上移。

img_e4f6397098785b3843741531f17b6728.png
updateID方法

针对第二个坑我采用此解决方案:要在主界面获取对话框的数据的话,我直接在对话框获取数据后一并插入SQLite数据库,这样主界面就可以直接从数据库中读取数据了,也就解决了对话框一旦销毁掉数据在内存中也跟着销毁的问题了。

img_69be4b619a41e551ae21686865cd9c5b.png
插入数据库

针对第三个坑我采用此解决方案:在插入的时候手动插入id,即虽然id一开始是自动增长的,但之后插入的时候我都手动插入id的值。

img_8e0ac817c10c7592dd0f216cb74619b8.png
map插入id
img_2a1dbc4112889d140eb8844f33169f63.png
手动插入id进入数据库

查找联系人功能本想着还是在主界面弹出自定义对话框,但写了1小时了还是不太明白在dismiss销毁对话框之间如何获取到信息,所以最后采用了同学了其他做法,直接在主界面设置个对话框,通过setView()方法把布局文件设置进去,此时对于布局界面的按钮就无法灵活定义样式了。不过此时需要用到打气筒inflate的方式加载布局文件并生成View对象,多用于ListView

img_e18ded85d27e45cec699be335334190d.png
按姓名查找的方法

PS:网上提供的三种使用打气筒方法

img_e599ac4d2f6f000ee9dd738218d95498.png

使用ListView显示数据的步骤为:1.创建一个适配器存储数据;2.把适配器通过ListView的setAdapter()方法添加进去,如下:

img_b8f3207747275d35840ba8ae2b29295f.png
代码截图

此处介绍菜单的使用:

选项菜单:

img_013c756961ce1dd383bc78ed6e3f39b6.png
代码截图

上下文菜单:注意要为上下文菜单注册监听哪个控件响应。代码为:registerForContextMenu(list);

img_e314f06f8b523df4489d74a3b4df4049.png
代码截图

Tip:最后程序运行效果图如下:


img_86ccbd289f5446da7e4532a380a60fd4.png
新增联系人
img_8b2314d3ed57b26d14839e27678812c0.png
删除联系人


img_3352e2521a990c3e61576ccf85f8eb72.png
查找联系人

哈哈,如有写错请提出,这对还是新手的我大有帮助。上面值得优化得地方有用户体验和创建数据库连接时不能写死两点没做好。

代码放在我的码云上,链接为:https://gitee.com/jxb_770411142/codes/iqu6a97p3rjnl8wdgo1bx100

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10092 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13893 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9161 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
4660 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7365 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4510 0
+关注
小江同志
爱编程、爱生活
29
文章
10
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载