上一篇
安卓开发 存储实例
- 行业动态
- 2025-04-22
- 3
安卓存储方案实现详解
SharedPreferences存储
应用场景:轻量级键值对存储,适合保存配置信息、用户偏好等简单数据
实现示例:
<!-res/xml/prefs.xml --> <PreferenceScreen> <EditTextPreference android:key="username" android:title="用户名" android:defaultValue="guest"/> </PreferenceScreen>
// 写入数据 val prefs = getSharedPreferences("user_prefs", MODE_PRIVATE) prefs.edit() .putString("username", "JohnDoe") .putBoolean("isLoggedIn", true) .apply() // 读取数据 val username = prefs.getString("username", "defaultUser") val isLoggedIn = prefs.getBoolean("isLoggedIn", false)
文件存储
应用场景:存储文本、二进制文件(如图片、视频),需处理文件路径和权限
实现示例:
// 内部存储(自动清理) val file = File(applicationContext.filesDir, "config.txt") file.writeText("app_version=1.2.3") // 外部存储(需申请MANAGE_EXTERNAL_STORAGE权限) val externalFile = File(getExternalFilesDir(null), "data.json") externalFile.writeText("""{"key":"value"}""")
SQLite数据库存储
应用场景:结构化数据存储,支持复杂查询
实现步骤:
- 创建数据库帮助类
class DbHelper(context: Context) : SQLiteOpenHelper(context, "app.db", null, 1) { override fun onCreate(db: SQLiteDatabase) { db.execSQL(""" CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT UNIQUE ) """) } }
- 执行增删改查
val db = DbHelper(this).writableDatabase db.insert("users", null, ContentValues().apply { put("name", "Alice") put("email", "alice@example.com") })
val cursor = db.query(“users”, null, “email=?”, arrayOf(“alice@example.com”), null, null, null)
if (cursor.moveToFirst()) {
val name = cursor.getString(cursor.getColumnIndex(“name”))
}
# 四、网络存储(以Retrofit+云端为例)
实现流程:
1. 定义API接口
```kotlin
interface ApiService {
@POST("/upload")
suspend fun uploadData(@Body data: RequestBody): Response<UploadResult>
}
- 异步上传数据
val api = Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build() .create(ApiService::class.java)
GlobalScope.launch(Dispatchers.IO) {
val result = api.uploadData(“{“key”:”value”}”.toRequestBody())
withContext(Dispatchers.Main) {
// 处理返回结果
}
}
# 存储方式对比表
| 存储类型 | 数据格式 | 适用场景 | 操作复杂度 | 持久性 |
|-------------------|-------------------|------------------------------|------------|--------|
| SharedPreferences | Key-Value | 简单配置项 | 低 | 高 |
| 文件存储 | 文本/二进制 | 多媒体文件、配置文件 | 中 | 高 |
| SQLite | 关系型数据表 | 结构化业务数据 | 高 | 高 |
| 网络存储 | JSON/Protobuf | 跨设备同步、云端备份 | 中高 | 依赖网络 |
# 常见问题解答
Q1:如何选择不同的存储方案?
A:根据数据特性选择:
临时状态:`SharedPreferences`(如夜间模式设置)
小文件资源:内部/外部文件存储(如下载的图片)
业务数据:SQLite(如订单记录)
跨设备同步:网络存储(如用户收藏列表)
Q2:如何优化数据库读写性能?
A:关键策略包括:
1. 使用事务批量操作(`beginTransaction()`)
2. 建立索引加速查询(`CREATE INDEX`)
3. 采用异步线程操作数据库
4. 使用`CursorWindow`优化大数据量传输