上一篇
安卓开发之数据存储学习
- 行业动态
- 2025-04-22
- 4
安卓数据存储方式详解
SharedPreferences(偏好设置)
特点:
- 基于键值对存储(只能存基本数据类型)
- 自动持久化到XML文件
- 适合少量简单配置信息
使用场景:
- 用户登录状态
- 应用设置开关(如夜间模式)
- 临时标记位
示例代码:
// 写入数据 SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putString("username", "JohnDoe"); editor.commit(); // 或 apply()异步提交 // 读取数据 String name = sp.getString("username", "defaultValue");
文件存储(Internal/External)
特点:
- 直接操作文件系统
- 内部存储:
/data/data/包名/files/
(无需权限) - 外部存储:需申请
WRITE_EXTERNAL_STORAGE
权限 - 适合存储文本/二进制文件(如图片、视频)
使用场景:
- 缓存JSON数据
- 保存日志文件
- 存储下载的媒体资源
示例代码:
// 写入内部存储 File file = new File(getFilesDir(), "data.txt"); try (FileOutputStream fos = new FileOutputStream(file)) { fos.write("Hello World".getBytes()); } // 读取外部存储 File externalFile = new File(getExternalFilesDir(null), "image.png"); try (FileInputStream fis = new FileInputStream(externalFile)) { // 处理输入流 }
SQLite数据库
特点:
- 轻量级关系型数据库
- 支持SQL语法操作
- 适合复杂数据结构(如用户信息表)
使用场景:
- 用户信息管理
- 订单记录存储
- 本地搜索功能实现
示例代码:
// 创建数据库帮助类 public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { super(context, "app.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE user(id INTEGER PRIMARY KEY, name TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS user"); } }
ContentProvider(内容提供者)
特点:
- 跨应用数据共享
- 统一数据访问接口
- 支持URI路由机制
使用场景:
- 访问通讯录数据
- 分享文件给其他应用
- 实现自定义数据暴露
示例代码:
// 调用系统通讯录 Uri uri = ContactsContract.Contacts.CONTENT_URI; Cursor cursor = getContentResolver().query(uri, null, null, null, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); }
数据存储方式对比表
存储方式 | 数据类型 | 持久化 | 访问速度 | 适用场景 |
---|---|---|---|---|
SharedPreferences | 键值对(基本类型) | 是 | 快 | 简单配置项 |
文件存储 | 文本/二进制文件 | 是 | 中等 | 多媒体资源、日志缓存 |
SQLite | 结构化数据表 | 是 | 较慢 | 复杂查询、多表关联 |
ContentProvider | 统一接口数据 | 依赖实现 | 最慢 | 跨应用数据共享 |
相关问题与解答
Q1:如何选择SharedPreferences和SQLite?
A:
- SharedPreferences:当数据结构简单(键值对)、无需复杂查询时使用,例如用户偏好设置。
- SQLite:当需要存储结构化数据(如多表关联)、执行复杂查询(如模糊搜索)时使用,例如订单管理系统。
Q2:如何保护SQLite数据库的安全性?
A:
- 加密存储:使用AES加密数据库文件(需自定义实现)。
- 权限控制:将数据库文件设置为
MODE_PRIVATE
,避免其他应用访问。 - 数据脱敏:敏感字段(如密码)存储时进行哈希