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

安卓开发保存数据和调用

安卓保存数据可通过SharedPreferences、文件存储、SQLite数据库等方式,调用时分别使用getSharedPreferences()、FileInputStream或SQLiteDatabase查询接口读取数据

安卓数据存储与调用全解析


SharedPreferences(轻量级键值对)

用途:存储简单配置项(如用户设置、登录状态)
特点

  • 基于XML文件,本质是键值对
  • 支持多种数据类型自动转换
  • 异步提交,性能高

操作步骤

  1. 获取SharedPreferences对象
    SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
  2. 写入数据
    SharedPreferences.Editor editor = sp.edit();
    editor.putString("username", "John");
    editor.putInt("age", 25);
    editor.apply(); // 异步提交
    // editor.commit(); // 同步提交
  3. 读取数据
    String name = sp.getString("username", "default");
    int age = sp.getInt("age", 0);

文件存储(原始数据持久化)

用途:保存文本/二进制文件(如JSON配置、图片缓存)
特点

  • 直接操作文件系统
  • 需处理文件路径兼容性(建议用getExternalFilesDir()
  • 大文件读写需考虑性能

操作步骤

安卓开发保存数据和调用  第1张

  1. 写入文件
    File file = new File(getFilesDir(), "data.txt");
    try (FileOutputStream fos = new FileOutputStream(file)) {
        fos.write("Hello World".getBytes());
    }
  2. 读取文件
    byte[] buffer = new byte[1024];
    try (FileInputStream fis = new FileInputStream(file)) {
        int len = fis.read(buffer);
        String content = new String(buffer, 0, len);
    }

SQLite数据库(结构化数据存储)

用途:管理复杂业务数据(如用户信息、订单记录)
特点

  • 轻量级关系型数据库
  • 支持SQL语法操作
  • 需手动处理线程安全和版本升级

操作步骤

  1. 创建数据库帮助类

    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)");
        }
        // 其他生命周期方法...
    }
  2. 增删改查操作

    // 插入数据
    ContentValues values = new ContentValues();
    values.put("name", "Alice");
    db.insert("user", null, values);
    // 查询数据
    Cursor cursor = db.query("user", null, null, null, null, null, null);

Room持久化库(SQLite优化方案)

用途:简化SQLite操作,支持编译时校验
特点

  • 基于注解生成代码
  • 支持LiveData观察数据变化
  • 自动处理线程切换

操作步骤

  1. 定义实体类
    @Entity
    public class User {
        @PrimaryKey(autoGenerate = true)
        public int id;
        public String name;
    }
  2. 创建DAO接口
    @Dao
    public interface UserDao {
        @Insert
        void insert(User user);
        @Query("SELECT  FROM User")
        List<User> getAll();
    }
  3. 使用数据库实例
    AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app.db").build();
    UserDao userDao = db.userDao();

数据存储方式对比表

存储方式 数据类型 适用场景 性能 复杂度
SharedPreferences 基本数据类型 简单配置项
文件存储 任意二进制/文本数据 大文件、临时缓存
SQLite 结构化数据 复杂业务数据
Room 结构化数据(带扩展) 需要数据观察的业务场景

相关问题与解答

Q1:如何选择SharedPreferences和SQLite?
A:若数据是简单的键值对(如开关状态、用户偏好),优先用SharedPreferences;若涉及多表关联、复杂查询(如订单管理),必须使用SQLite或Room。

Q2:Room相比直接使用SQLite的优势?
A:Room提供编译时语法检查,减少运行时错误;通过LiveData实现数据变更自动通知;封装线程切换逻辑,避免在UI线程操作数据库导致的卡顿

0