1.添加库
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3")
2.添加序列化插件配置(很重要,不然不能进行数据存取)
plugins {
kotlin("plugin.serialization") version "2.0.0"
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}
3.创建数据类
@Serializable //这句很重要,比较要加上
data class AppSettings(
@SerialName("id")
var id: Boolean = true,
@SerialName("Num")
var Num: Boolean = true,
@SerialName("Date1")
var Date1: Boolean = true,
@SerialName("ProductName")
var ProductName: Boolean = true,
@SerialName("RealNum")
var RealNum: Boolean = true,
@SerialName("Price")
var Price: Boolean = true,
@SerialName("CustomName")
var CustomName: Boolean = true,
@SerialName("ScopeName")
var ScopeName: Boolean = true,
) {
companion object {
fun default() = AppSettings()
}
}
4.创建功能类
import android.content.Context
import android.util.Log
import data.AppSettings
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json
import kotlinx.serialization.encodeToString
import java.io.File
import kotlin.getValue
class SettingsRepository(private val context: Context) {
private val configFile by lazy {
File(context.filesDir, "user_settings.json").apply {
if (!exists()) createNewFile()
}
}
private val json = Json {
prettyPrint = true
ignoreUnknownKeys = true
coerceInputValues = true
}
suspend fun loadSettings(): AppSettings = withContext(Dispatchers.IO) {
try {
configFile.readText().takeIf { it.isNotBlank() }?.let {
json.decodeFromString(it)
} ?: AppSettings.default()
} catch (e: Exception) {
Log.e("Settings", "配置加载失败,使用默认值", e)
AppSettings.default()
}
}
suspend fun saveSettings(settings: AppSettings): Boolean {
return withContext(Dispatchers.IO) {
try {
// 原子写入模式
val tempFile = File.createTempFile("config", ".tmp", context.cacheDir)
val json= json.encodeToString(settings)
tempFile.writeText(json)
tempFile.renameTo(configFile)
true
} catch (e: Exception) {
Log.e("Settings", "配置保存失败", e)
false
}
}
}
}
5.功能类使用
private val repository: SettingsRepository = SettingsRepository(context)
fun LoadParamsConfig()
{
GlobalScope.launch {
val settings = repository.loadSettings()
_AppSettings.update {
it.copy(
id = settings.id,
Num = settings.Num,
Date1 = settings.Date1,
ProductName = settings.ProductName,
RealNum = settings.RealNum,
Price = settings.Price,
CustomName = settings.CustomName,
ScopeName = settings.ScopeName
)
}
}
}
fun SaveParamsToConfig(){
GlobalScope.launch {
var appSettings1 = AppSettings()
appSettings1.let {
it.id = appSettings.value.id
it.Date1 = appSettings.value.Date1
it.Num = appSettings.value.Num
it.RealNum = appSettings.value.RealNum
it.Price = appSettings.value.Price
it.ScopeName = appSettings.value.ScopeName
it.ProductName = appSettings.value.ProductName
it.CustomName = appSettings.value.CustomName
}
repository.saveSettings(appSettings1)
Log.i("scoreInfo",appSettings1.toString())
}
}
上面代码可以入在一个ViewModel类中进行操作。
259

被折叠的 条评论
为什么被折叠?



