当前位置: 首页 > news >正文

Android Studio开发 SharedPreferences 详解

文章目录

  • SharedPreferences 详解
    • 基本概念
    • 获取 SharedPreferences 实例
      • 1. Context.getSharedPreferences()
      • 2. Activity.getPreferences()
      • 3. PreferenceManager.getDefaultSharedPreferences()
    • 存储模式
    • 写入数据
      • apply() vs commit()
    • 读取数据
    • 监听数据变化
    • 最佳实践
    • 高级用法
      • 存储字符串集合 (API 11+)
      • 使用 EncryptedSharedPreferences (API 23+)
  • SQLite 基本语法详解
    • 1. 数据类型
    • 2. 数据库操作
      • 创建数据库
      • 删除数据库
    • 3. 表操作
      • 创建表
      • 删除表
      • 修改表
    • 4. 数据操作
      • 插入数据
      • 查询数据
      • 更新数据
      • 删除数据
    • 5. 高级查询
      • 排序
      • 限制结果
      • 分组
      • 连接查询
    • 6. 约束
    • 7. 索引
      • 创建索引
      • 删除索引
    • 8. 视图
      • 创建视图
      • 删除视图
    • 9. 事务
    • 10. Android 中的 SQLite 使用
    • 总结

在这里插入图片描述

SharedPreferences 详解

SharedPreferences 是 Android 提供的一种轻量级数据存储方式,用于存储简单的键值对数据。它适合保存应用的配置信息、用户偏好设置等小量数据。

基本概念

SharedPreferences 以 XML 文件的形式存储在设备的 /data/data/<package_name>/shared_prefs/ 目录下,具有以下特点:

  • 只能存储基本数据类型:boolean, float, int, long, string 和 string set
  • 数据以键值对形式存储
  • 线程安全
  • 不支持多进程共享(除非使用 MODE_MULTI_PROCESS,但已废弃)

获取 SharedPreferences 实例

有三种方式获取 SharedPreferences 对象:

1. Context.getSharedPreferences()

// 指定文件名和模式
SharedPreferences sharedPref = context.getSharedPreferences("my_preferences", Context.MODE_PRIVATE);

2. Activity.getPreferences()

// 使用 Activity 类名作为文件名,只适用于当前 Activity
SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);

3. PreferenceManager.getDefaultSharedPreferences()

// 获取默认的 SharedPreferences 文件 (包名_preferences.xml)
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);

存储模式

  • MODE_PRIVATE:默认模式,只有当前应用可以访问
  • MODE_WORLD_READABLEMODE_WORLD_WRITEABLE:已在 API 17 废弃
  • MODE_MULTI_PROCESS:已在 API 23 废弃

写入数据

要写入数据,需要使用 SharedPreferences.Editor:

SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("key_string", "Hello World");
editor.putInt("key_int", 123);
editor.putBoolean("key_boolean", true);
editor.apply(); // 异步提交
// 或 editor.commit(); // 同步提交,返回boolean表示成功与否

apply() vs commit()

  • apply():异步写入磁盘,无返回值,更高效
  • commit():同步写入磁盘,返回 boolean 表示成功与否,会阻塞 UI 线程

读取数据

String stringValue = sharedPref.getString("key_string", "default_value");
int intValue = sharedPref.getInt("key_int", 0);
boolean booleanValue = sharedPref.getBoolean("key_boolean", false);

监听数据变化

可以注册监听器来监听数据变化:

SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {@Overridepublic void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {// 处理特定key的变化}};sharedPref.registerOnSharedPreferenceChangeListener(listener);// 记得在适当时候取消注册
sharedPref.unregisterOnSharedPreferenceChangeListener(listener);

最佳实践

  1. 不要存储大量数据:SharedPreferences 不适合存储大量数据,考虑 SQLite 或其他方式
  2. 避免存储复杂对象:只能存储基本数据类型
  3. 合理使用 apply():大多数情况下使用 apply() 而非 commit()
  4. 注意性能:频繁读写可能影响性能
  5. 合理命名文件:对于不同模块使用不同的 SharedPreferences 文件

高级用法

存储字符串集合 (API 11+)

// 写入
Set<String> stringSet = new HashSet<>();
stringSet.add("value1");
stringSet.add("value2");
editor.putStringSet("key_set", stringSet);// 读取
Set<String> retrievedSet = sharedPref.getStringSet("key_set", new HashSet<String>());

使用 EncryptedSharedPreferences (API 23+)

对于敏感数据,可以使用加密的 SharedPreferences:

String masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC);SharedPreferences sharedPreferences = EncryptedSharedPreferences.create("secret_shared_prefs",masterKeyAlias,context,EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);

SharedPreferences 是 Android 开发中最常用的数据存储方式之一,合理使用可以方便地管理应用的配置和用户偏好设置。


SQLite 基本语法详解

SQLite 是一个轻量级的关系型数据库,被广泛用于移动应用和嵌入式系统中。以下是 SQLite 的基本语法详解。

1. 数据类型

SQLite 支持以下基本数据类型:

  • NULL - 空值
  • INTEGER - 整数
  • REAL - 浮点数
  • TEXT - 文本字符串
  • BLOB - 二进制数据

2. 数据库操作

创建数据库

-- 创建或打开数据库(通常在代码中完成)
-- Android中通过SQLiteOpenHelper类实现

删除数据库

-- 删除数据库文件(通常在代码中完成)
-- Android中使用context.deleteDatabase("database_name.db")

3. 表操作

创建表

CREATE TABLE table_name (column1 datatype PRIMARY KEY,column2 datatype NOT NULL,column3 datatype DEFAULT default_value,column4 datatype CHECK(condition),...
);

示例:

CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER,email TEXT UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

删除表

DROP TABLE table_name;

修改表

-- 添加列
ALTER TABLE table_name ADD COLUMN column_name datatype;-- 重命名表
ALTER TABLE old_table_name RENAME TO new_table_name;

4. 数据操作

插入数据

INSERT INTO table_name (column1, column2, ...) 
VALUES (value1, value2, ...);

示例:

INSERT INTO users (name, age, email) 
VALUES ('张三', 25, 'zhangsan@example.com');

查询数据

基本查询:

SELECT column1, column2, ... FROM table_name;
SELECT * FROM table_name;  -- 查询所有列

条件查询:

SELECT * FROM table_name WHERE condition;

示例:

SELECT * FROM users WHERE age > 20;
SELECT name, email FROM users WHERE age BETWEEN 20 AND 30;

更新数据

UPDATE table_name 
SET column1 = value1, column2 = value2, ...
WHERE condition;

示例:

UPDATE users 
SET age = 26, email = 'new_email@example.com' 
WHERE id = 1;

删除数据

DELETE FROM table_name WHERE condition;

示例:

DELETE FROM users WHERE id = 5;

5. 高级查询

排序

SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC;

限制结果

SELECT * FROM table_name LIMIT number OFFSET start;
-- 或简写为
SELECT * FROM table_name LIMIT start, number;

分组

SELECT column1, COUNT(*) 
FROM table_name 
GROUP BY column1;

连接查询

-- 内连接
SELECT a.column1, b.column2 
FROM table1 a 
INNER JOIN table2 b ON a.id = b.table1_id;-- 左外连接
SELECT a.column1, b.column2 
FROM table1 a 
LEFT JOIN table2 b ON a.id = b.table1_id;

6. 约束

SQLite 支持以下约束:

  • PRIMARY KEY - 主键
  • UNIQUE - 唯一值
  • NOT NULL - 非空
  • CHECK - 检查条件
  • DEFAULT - 默认值
  • FOREIGN KEY - 外键

7. 索引

创建索引

CREATE INDEX index_name ON table_name (column1, column2, ...);

删除索引

DROP INDEX index_name;

8. 视图

创建视图

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

删除视图

DROP VIEW view_name;

9. 事务

BEGIN TRANSACTION;
-- SQL语句
COMMIT;
-- 或 ROLLBACK; 回滚

10. Android 中的 SQLite 使用

在 Android 中,通常通过 SQLiteOpenHelper 类来操作 SQLite 数据库:

public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "my_database.db";private static final int DATABASE_VERSION = 1;public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE users (" +"id INTEGER PRIMARY KEY AUTOINCREMENT," +"name TEXT NOT NULL," +"age INTEGER);");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("DROP TABLE IF EXISTS users");onCreate(db);}
}

使用示例:

DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();// 插入数据
ContentValues values = new ContentValues();
values.put("name", "李四");
values.put("age", 30);
long newRowId = db.insert("users", null, values);// 查询数据
Cursor cursor = db.query("users", null, null, null, null, null, null);
while (cursor.moveToNext()) {String name = cursor.getString(cursor.getColumnIndex("name"));int age = cursor.getInt(cursor.getColumnIndex("age"));// 处理数据
}
cursor.close();db.close();

总结

SQLite 提供了完整的 SQL 功能,但比大型数据库系统更轻量。掌握这些基本语法后,您可以在 Android 应用中有效地存储和管理结构化数据。

相关文章:

  • 【MATLAB第115期】基于MATLAB的多元时间序列的ARIMAX的预测模型
  • js原型链prototype解释
  • Nature Communications 面向形状可编程磁性软材料的数据驱动设计方法—基于随机设计探索与神经网络的协同优化框架
  • Qt绘制可选择范围的日历
  • 未来教育风向标 | 教育学顶流985高校,华东师范大学《AIGC技术赋能教育数字化转型的机遇与挑战》,13所大学deepseek
  • 深度解析MQTT源码架构与AIGC场景融合实战
  • 三生原理与现有密码学的核心区别?
  • 洗车小程序系统前端uniapp 后台thinkphp
  • AI大模型:(二)2.3 预训练自己的模型
  • chili3d调试笔记8 打印零件属性
  • VSCode 用于JAVA开发的环境配置,JDK为1.8版本时的配置
  • C++继承(最详细)
  • PDF转换Word深度评测 - ComPDFKit Conversion SDK V3.0
  • Oracle--SQL性能优化与提升策略
  • PowerQuery逆透视将二维表转换为一维表
  • 全面介绍AVFilter 的添加和使用
  • Neo4j 可观测性最佳实践
  • STM32单片机入门学习——第45节: [13-2] 修改频主睡眠模式停止模式待机模式
  • 详解Node.js中的setImmediate()函数
  • Android自动化功能-使用Appium获取android页面节点元素信息
  • 最新民调显示特朗普支持率降至上任以来新低
  • 关税战推高成本,美澳“奥库斯”核潜艇协议或将生变
  • 市场监管部门完成全国保健食品生产企业体系检查首轮全覆盖
  • 一周人物| 萨韦利上海画展,陆永安“从董源到塞尚”
  • 深化应用型人才培养,这所高校聘任行业企业专家深度参与专业设置
  • 调查显示特朗普在经济问题上的支持率跌至其总统生涯最低