当前位置:首页 > 行业动态 > 正文

安卓开发之数据存储学习

安卓数据存储方式详解

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权限
  • 适合存储文本/二进制文件(如图片、视频)

使用场景

安卓开发之数据存储学习  第1张

  • 缓存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

  1. 加密存储:使用AES加密数据库文件(需自定义实现)。
  2. 权限控制:将数据库文件设置为MODE_PRIVATE,避免其他应用访问。
  3. 数据脱敏:敏感字段(如密码)存储时进行哈希
0