上一篇
安卓开发保存数据和调用
- 行业动态
- 2025-04-23
- 12
安卓保存数据可通过SharedPreferences、文件存储、SQLite数据库等方式,调用时分别使用getSharedPreferences()、FileInputStream或SQLiteDatabase查询接口读取数据
安卓数据存储与调用全解析
SharedPreferences(轻量级键值对)
用途:存储简单配置项(如用户设置、登录状态)
特点:
- 基于XML文件,本质是键值对
- 支持多种数据类型自动转换
- 异步提交,性能高
操作步骤:
- 获取
SharedPreferences
对象SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
- 写入数据
SharedPreferences.Editor editor = sp.edit(); editor.putString("username", "John"); editor.putInt("age", 25); editor.apply(); // 异步提交 // editor.commit(); // 同步提交
- 读取数据
String name = sp.getString("username", "default"); int age = sp.getInt("age", 0);
文件存储(原始数据持久化)
用途:保存文本/二进制文件(如JSON配置、图片缓存)
特点:
- 直接操作文件系统
- 需处理文件路径兼容性(建议用
getExternalFilesDir()
) - 大文件读写需考虑性能
操作步骤:
- 写入文件
File file = new File(getFilesDir(), "data.txt"); try (FileOutputStream fos = new FileOutputStream(file)) { fos.write("Hello World".getBytes()); }
- 读取文件
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语法操作
- 需手动处理线程安全和版本升级
操作步骤:
创建数据库帮助类
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)"); } // 其他生命周期方法... }
增删改查操作
// 插入数据 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观察数据变化
- 自动处理线程切换
操作步骤:
- 定义实体类
@Entity public class User { @PrimaryKey(autoGenerate = true) public int id; public String name; }
- 创建DAO接口
@Dao public interface UserDao { @Insert void insert(User user); @Query("SELECT FROM User") List<User> getAll(); }
- 使用数据库实例
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线程操作数据库导致的卡顿