☰分类导航

软件工程/数据存储与网络
课程进度 38% · 第5/11章第5/11章 · 标签 1/6
— 1 —

SharedPreferences

原Room实体、DAO、Retrofit接口和OkHttp请求是项目内片段,需依赖、权限及模型定义。Room数据库操作应在合适后台执行;SQLite游标与HTTP响应都要关闭,示例域名不提供真实业务接口。

SharedPreferences 用于存储轻量级的键值对数据,适合保存用户设置、配置信息等。

偏好值适合少量设置,不适合承担任务关系、查询和同步队列。区分用户明确保存的业务事实与可重建缓存,才能决定删除、迁移与备份策略。写入接口返回并不意味着页面会自动刷新,存储与观察结果要分别检查。


```java
// 写入数据
SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
sp.edit().putString("username", "Tom")
         .putInt("age", 25)
         .putBoolean("isLogin", true)
         .apply();

// 读取数据
String username = sp.getString("username", "");
int age = sp.getInt("age", 0);
boolean isLogin = sp.getBoolean("isLogin", false);
```
java
1
// 写入数据
2
SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
3
sp.edit().putString("username", "Tom")
4
.putInt("age", 25)
5
.putBoolean("isLogin", true)
6
.apply();
7
 
8
// 读取数据
9
String username = sp.getString("username", "");
10
int age = sp.getInt("age", 0);
11
boolean isLogin = sp.getBoolean("isLogin", false);

📖apply() 异步写入,commit() 同步写入。推荐使用 apply() 提高性能

— 2 —

SQLite 数据库

Android 内置 SQLite 数据库引擎,适合存储结构化数据。

SQLite示例需在后台按合适生命周期执行,动态输入使用参数绑定。查询得到Cursor后应按列契约读取并及时关闭;把数据库连接关闭并不会让错误SQL变正确。先用少量固定行核对插入和查询,再连接列表展示。


```java
// 创建或打开数据库
SQLiteDatabase db = openOrCreateDatabase(
    "test.db", MODE_PRIVATE, null);

// 建表
db.execSQL("CREATE TABLE IF NOT EXISTS user(" +
    "id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");

// 插入数据
db.execSQL("INSERT INTO user(name, age) VALUES('Tom', 25)");

// 查询
Cursor cursor = db.rawQuery("SELECT * FROM user", null);
while (cursor.moveToNext()) {
    String name = cursor.getString(cursor.getColumnIndex("name"));
}

// 关闭数据库
db.close();
```
java
1
// 创建或打开数据库
2
SQLiteDatabase db = openOrCreateDatabase(
3
"test.db", MODE_PRIVATE, null);
4
 
5
// 建表
6
db.execSQL("CREATE TABLE IF NOT EXISTS user(" +
7
"id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");
8
 
9
// 插入数据
10
db.execSQL("INSERT INTO user(name, age) VALUES('Tom', 25)");
11
 
12
// 查询
13
Cursor cursor = db.rawQuery("SELECT * FROM user", null);
14
while (cursor.moveToNext()) {
15
String name = cursor.getString(cursor.getColumnIndex("name"));
16
}
17
 
18
// 关闭数据库
19
db.close();