安卓网络通讯录,如何高效管理与同步你的联系人?
安卓网络通讯录
一、项目
简介
安卓通讯录主要实现了对联系人信息(姓名和电话)的增加、删除、修改和查询功能,系统通过SQLite数据库来存储数据,系统有欢迎、注册和登录页面,先注册后使用,主页面包含对联系人信息增删改查这四种功能:在添加联系人页面,输***系人信息,若联系人在数据库中不存在则可以添加成功;在删除和修改用户页面,都可以通过姓名搜索到指定联系人的信息,然后对联系人进行删除或者修改;在查询联系人页面,可以查看到数据库中存储的所有联系人信息,点击任意一项可以拨打电话给对方。
开发环境
Android Studio
SQLite数据库
Java/Kotlin编程语言
二、详细设计
SQLite数据库
1.1简介
SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用,不仅支持标准SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非常方便!Android内置的SQLite是SQLite 3版本的,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通过文件来保存数据库,一个文件就是一个数据库,数据库中又包含多个表格,表格里又有多条记录,每个记录由多个字段构成,每个字段有对应的值,每个值我们可以指定类型,也可以不指定类型(主键除外)。
1.2使用
MyDBOpenHelper 类继承自 SQLiteOpenHelper 抽象类,负责管理数据库的创建和版本管理,当数据库第一次被创建时,onCreate 方***被调用,在本项目中创建了两个表格:Contacts 和 User,Contacts 表用于存储联系人的姓名和电话号码,其中姓名为主键;User 表用于存储用户账户和密码信息,账户为主键,如果数据库版本需要升级,onUpgrade 方法将被执行。
在构造函数 MyDBOpenHelper(Context context) 中,传入了上下文对象和数据库名称addres***ook.db,版本号设为1,表示当前版本是初始版本,如果未来需要更新数据库结构,可以通过修改版本号并实现 onUpgrade 方法来完成数据库的迁移工作。
public class MyDBOpenHelper extends SQLiteOpenHelper { // 数据库文件夹名为addressbook.db,版本号为1 public MyDBOpenHelper(Context context) { super(context, "addressbook.db", null, 1); } // 数据库首次创建时创建数据表 @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE Contacts(name varchar(20) primary key, phone varchar(20))"); db.execSQL("CREATE TABLE User(account varchar(20) primary key, password varchar(20))"); } // 数据库版本升级 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
欢迎注册登录
欢迎页面在页面中心绘制一张图像,通讯录应用启动时会显示欢迎页面,在显示3000毫秒后自动将用户导航到登录页面,登录页面可以输入账号和密码进行登录,首先对账号和密码进行判空,然后会与数据库中存储的账号信息进行对比,若账号不存在则提示用户,若账号存在且密码也正确匹配则允许登录,注册页面的页面绘制与登录页面相似,都是文本框和输入框的结合,用户注册时系统会判断账号或密码是否为空、两次输入密码是否相同、账号是否已存在等逻辑,总体而言,逻辑理清楚之后实现不算困难。
// 当计时结束跳转至主页面 handler.postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(WelcomeActivity.this, LoginActivity.class); startActivity(intent); WelcomeActivity.this.finish(); } }, 3000);
增删改查
ContactsDao提供了一系列标准的CRUD(创建、读取、更新、删除)操作方法,用于操作数据库管理联系人信息,ContactsDao类有一个私有成员变量context,用于持有对外部类的引用,通常是一个Activity或Service,myDBOpenHelper是一个继承自SQLiteOpenHelper的辅助类,负责管理数据库的创建和版本管理。
public class ContactsDao { private Context context; private MyDBOpenHelper myDBOpenHelper; public ContactsDao(Context context) { this.context = context; myDBOpenHelper = new MyDBOpenHelper(context); } // 添加联系人 public void addContact(String name, String phone) { SQLiteDatabase db = myDBOpenHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("phone", phone); db.insert("Contacts", null, values); db.close(); } // 删除联系人 public void deleteContact(String name) { SQLiteDatabase db = myDBOpenHelper.getWritableDatabase(); db.delete("Contacts", "name=?", new String[]{name}); db.close(); } // 修改联系人 public void updateContact(String name, String newPhone) { SQLiteDatabase db = myDBOpenHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("phone", newPhone); db.update("Contacts", values, "name=?", new String[]{name}); db.close(); } // 查询联系人 public Cursor getAllContacts() { SQLiteDatabase db = myDBOpenHelper.getWritableDatabase(); return db.query("Contacts", null, null, null, null, null, null); } }
UI界面设计
在UI界面设计方面,可以参考一些主流的通讯录软件如QQ通讯录、百度通讯录等的设计方式,以下是一个简单的UI界面设计方案:
欢迎页面:显示一张欢迎图片,3秒后自动跳转到登录页面。
登录页面:包含账号输入框、密码输入框和“登录”按钮,用户可以输入账号和密码进行登录。
注册页面:包含账号输入框、密码输入框、确认密码输入框和“注册”按钮,用户可以输入信息进行注册。
主页面:包含一个添加联系人按钮、一个编辑联系人按钮和一个删除联系人按钮,点击添加联系人按钮可以进入添加联系人页面;点击编辑联系人按钮可以进入编辑联系人页面;点击删除联系人按钮可以进入删除联系人页面,主页面还包含一个联系人列表,显示所有联系人的信息,用户可以点击任意一项联系人信息拨打电话。
添加联系人页面:包含姓名输入框、电话输入框和一个“保存”按钮,用户可以输***系人的姓名和电话,点击“保存”按钮可以将联系人信息保存到数据库中,如果联系人已经存在,则提示用户不能重复添加。
编辑联系人页面:与添加联系人页面类似,但是需要先选择要编辑的联系人,用户可以修改联系人的姓名和电话,点击“保存”按钮可以将修改后的信息保存到数据库中,如果联系人不存在,则提示用户不能编辑。
删除联系人页面:与编辑联系人页面类似,但是需要先选择要删除的联系人,用户可以删除指定的联系人信息,点击“删除”按钮可以将联系人信息从数据库中删除,如果联系人不存在,则提示用户不能删除。
三、相关问题与解答
如何优化SQLite数据库的性能?
对于频繁查询的操作,可以考虑使用索引来提高查询速度,可以在name字段上创建索引:
CREATE INDEX idx_name ON Contacts(name);
避免在主线程中执行耗时的数据库操作,可以使用异步任务或者子线程来处理这些操作,可以使用AsyncTask或者ThreadPoolExecutor来执行耗时的数据库操作。
定期清理不再使用的数据库文件和临时文件,释放磁盘空间,可以使用以下代码定期清理数据库文件:
File dbFile = context.getDatabasePath("addressbook.db"); if (dbFile.exists()) { dbFile.delete(); }
尽量减少Cursor的使用次数和持有时间,避免内存泄漏,在使用完Cursor后及时关闭它:
cursor.close();
如何保证用户数据的安全性?
对用户的敏感信息进行加密存储,例如使用AES对称加密算法对用户的密码进行加密存储,可以使用Java提供的Cipher类来实现AES加密和解密操作。
SecretKeySpec key = new SecretKeySpec("your_key".getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] encrypted = cipher.doFinal(password.getBytes()); String encryptedPassword = Base64.encodeToString(encrypted, Base64.DEFAULT);
在传输用户数据时使用HTTPS协议而不是HTTP协议,确保数据传输的安全性,可以在AndroidManifest.xml中配置HTTPS:
<application> android:usesCleartextTraffic="false" android:networkSecurityConfig="@xml/network_security_config"> </application>
以上内容就是解答有关“安卓网络通讯录”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。