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

安卓开发存储数据

安卓开发中常见的数据存储方式

SharedPreferences(轻量级键值对)

  • 适用场景:存储简单配置、用户偏好设置(如开关状态、主题模式)。

  • 特点

    • 以键值对形式存储(支持Stringintboolean等基本类型)。
    • 本质是XML文件,存储在应用私有目录。
    • 读写操作简单,性能高。
  • 示例代码

    // 写入数据
    SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
    sp.edit().putString("username", "John").apply();
    // 读取数据
    String username = sp.getString("username", "default");

文件存储(File)

  • 适用场景:存储文本、二进制文件(如图片、视频、缓存文件)。

  • 特点

    • 分为内部存储(应用私有,无需申请权限)和外部存储(需动态申请权限,Android 10后需适配分区存储)。
    • 内部存储路径:context.getFilesDir()
    • 外部存储路径:Environment.getExternalStorageDirectory()(需注意权限)。
  • 示例代码

    // 写入文件
    File file = new File(getFilesDir(), "data.txt");
    try (FileOutputStream fos = new FileOutputStream(file)) {
        fos.write("Hello".getBytes());
    }
    // 读取文件
    try (FileInputStream fis = new FileInputStream(file)) {
        int len;
        byte[] buffer = new byte[1024];
        while ((len = fis.read(buffer)) != -1) {
            // 处理数据
        }
    }

SQLite数据库(结构化数据)

  • 适用场景:存储复杂关系型数据(如用户信息、订单列表)。

  • 特点

    • 轻量级嵌入式数据库,支持SQL语法。
    • 通过SQLiteOpenHelper管理数据库创建与升级。
    • 适合频繁读写操作。
  • 示例代码

    // 创建数据库帮助类
    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) {
            // 处理数据库升级
        }
    }

ContentProvider(跨应用数据共享)

  • 适用场景:共享数据给其他应用(如访问联系人、媒体库)。
  • 特点
    • 通过URI标识数据,支持CRUD操作。
    • 可自定义实现,但需处理权限和安全性。
  • 示例代码
    // 查询联系人数据
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    if (cursor != null) {
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            // 处理数据
        }
        cursor.close();
    }

网络存储(远程数据)

  • 适用场景:存储需跨设备同步的数据(如用户登录信息、云端文件)。
  • 特点
    • 依赖后端服务(如REST API、云数据库)。
    • 需处理网络请求和数据同步逻辑。
  • 示例工具:Retrofit、OkHttp、Firebase等。

存储方式对比表

存储方式 数据类型 持久化 复杂度 适用场景
SharedPreferences 键值对(简单类型) 配置、偏好设置
文件存储 文本/二进制文件 缓存、多媒体、配置文件
SQLite数据库 结构化数据(表、关系) 中高 复杂数据、搜索、关联查询
ContentProvider 公开数据(跨应用) 系统级数据共享(如联系人)
网络存储 任意类型(依赖服务) 跨设备同步、云端存储

相关问题与解答

问题1:如何根据数据类型选择合适的存储方式?

解答

  • 简单配置:使用SharedPreferences(如夜间模式开关)。
  • 小文件/文本:使用文件存储(如JSON缓存、日志文件)。
  • 结构化数据:使用SQLite(如用户信息表、订单记录)。
  • 跨应用共享:使用ContentProvider(如访问系统相册)。
  • 大文件/云端同步:使用网络存储(如上传图片到服务器)。

问题2:Android 10及以上系统的外部存储权限如何处理?

解答

  • 分区存储(Scoped Storage):Android 10后,外部存储分为“应用专属空间”和“共享空间”。
  • 适配方法
    1. 使用MediaStore API操作媒体文件(如图片、音频)。
    2. 申请MANAGE_EXTERNAL_STORAGE权限(需谨慎,仅必要场景使用)。
    3. 将文件存储在应用安装目录下的外部存储空间(getExternalFilesDir())。
0