安卓——之ListView和SQLite数据库写一个联系人
安卓的数据存储分为五大类: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了。。。
亮点:程序实现了第一次登陆之后的每次登陆都自动访问数据库显示之前存储的联系人信息。
接下来直接开始一步步实现功能了,首先创建一个数据库类。
针对第一个坑我采用此解决方案:当开始删除数据库数据时,把id大于当前删除数据的id都update往上移。
针对第二个坑我采用此解决方案:要在主界面获取对话框的数据的话,我直接在对话框获取数据后一并插入SQLite数据库,这样主界面就可以直接从数据库中读取数据了,也就解决了对话框一旦销毁掉数据在内存中也跟着销毁的问题了。
针对第三个坑我采用此解决方案:在插入的时候手动插入id,即虽然id一开始是自动增长的,但之后插入的时候我都手动插入id的值。
查找联系人功能本想着还是在主界面弹出自定义对话框,但写了1小时了还是不太明白在dismiss销毁对话框之间如何获取到信息,所以最后采用了同学了其他做法,直接在主界面设置个对话框,通过setView()方法把布局文件设置进去,此时对于布局界面的按钮就无法灵活定义样式了。不过此时需要用到打气筒inflate的方式加载布局文件并生成View对象,多用于ListView
PS:网上提供的三种使用打气筒方法
使用ListView显示数据的步骤为:1.创建一个适配器存储数据;2.把适配器通过ListView的setAdapter()方法添加进去,如下:
此处介绍菜单的使用:
选项菜单:
上下文菜单:注意要为上下文菜单注册监听哪个控件响应。代码为:registerForContextMenu(list);
Tip:最后程序运行效果图如下:
哈哈,如有写错请提出,这对还是新手的我大有帮助。上面值得优化得地方有用户体验和创建数据库连接时不能写死两点没做好。
代码放在我的码云上,链接为:https://gitee.com/jxb_770411142/codes/iqu6a97p3rjnl8wdgo1bx100
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
1.kotlin安卓实践课程-构建application
简介 主要会通过安卓实战来讲解kotlin语法和实际应用,本教程设及知识点包括框架模式mvp+mvvm, Databinding(数据绑定框架),Dagger2(依赖注入框架),DeepLink(页面路由框架),Rxjava,RxAndroid(异步操作框架),Retrofit,Okhtttp等,不过本教程重点在kotlin所以这些框架需要了解可自行百度。 针对人群:Android中级以上,kotlin入门 正式开始 都是程序员,直接看代码 /** * create by bigman * 知识点: 继承 ,init ,lateinit */ class App : Application() { //因为kotlin中的类定义同时也是构造函数,这个时候是不能进行操作的, // 所以kotlin增加了一个新的关键字init用来处理类的初始化问题,init模块中的内容可以直接使用构造函数的参数。 init { instance = this } //加入注解,标注这个apiComponent是需要注入的 //lateinit 则用于只能生命周期流程中进行获取或者初始化的变量,比如 And...
-
下一篇
Android 沉浸式状态栏 以及 伪沉浸式状态栏
小菜最近在调整页面状态栏的效果,主要包括沉浸式状态栏和伪沉浸状态栏(同事唠嗑给定义的玩的)。 前段时间整理过一篇 Android 沉浸式状态栏的多种样式,现在小菜在稍微的补充一下,都是在日常应用中测试整理的。 非 Toolbar 标题栏 就小菜接触的项目中根据业务不同,不是所有的标题栏都是 Toolbar 标题栏样式,很多是自定义的标题栏样式,为了效果统一,小菜的解决方案是修改顶部状态栏的颜色为程序的主题色,戏称为伪沉浸式状态栏。 以下是小菜自己测试的最简单的标题栏样式: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:layout_w...
相关文章
文章评论
共有0条评论来说两句吧...

微信收款码
支付宝收款码