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

安卓开发 存储实例

安卓存储方案实现详解

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数据库存储

应用场景:结构化数据存储,支持复杂查询
实现步骤

  1. 创建数据库帮助类
    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
             )
         """)
     }
    }
  2. 执行增删改查
    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>
}
  1. 异步上传数据
    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`优化大数据量传输
0