比照

SharedPreference

简称SP,运用键值对的方法保存原始类型的数据,默许以XML格局的文件来存储这些数据

  • 适用场景:存储量小、简略的数据appstore
  • 优缺点:有自己的内存级的缓存,在数据量小的时分读取较快,但是跨进程不安全,数据量json格局怎样翻开大的时分加载缓慢,全量写入,简单引起ANR

sqlite,java根底知识点 Room

Room并不是一个数据库,他是在 sqlite 的根底上供应了一个抽象层,让用户可以在充分利用 SQLi数据库体系概论第五版课后答案te 的健壮功用的一起,获享更健旺的数据库拜访机制。并保留了灵敏的接口appearance适配层。

@Database(entities = [KeyValue::class], version = 1, exportSchema = true)
abstract class KvStore : RoomDatabajson格局se(), CoroutineSco数据库规划pe by MainScop安全e() {
companion object {
val databajava游戏se by lazy {
Roomjava编译器.databaseBuilder(
SwUtils.appljavahdxxication, KvStore安全教育渠道登录::class.java, "key_vajavahdxxlue_database.db"
)
.al数据库规划lojson文件是干什么的wMainThreajsondQueries()
.build()
}
fun <T : Any> get(key: String, defaultValu安全教育e: T): T {
val type = defaultValue::cl安全教育渠道登录ass.s数据库规划impleName ?: ""
val value = database.dao().get(key, type)
return tjson怎样读ry {
val v = when (defaultValue) {
is String -> value
is Boolean -&安全gt; value == "true"
is Int -> valappearue.toInt()
is Floatjson转map -> value.toFloat()
is Double -> value.toDouble()
else -> Gson().fromJson(value, defauappearltValue::class.java)
}
v as T
} catch (e: Throwable) {
defaultValue
}
}
fun <T : Any> set(key: String,JSON value: T) {
val type = value::class.simpleName ?: ""
val vjava面试题 = when (value) {
is String, is Boole数据库规划an,jsonp跨域原理 is Int, is Float, is Double -> value.toString()
else -> Gson().tjson文件是干什么的oJson(value)
}
database.dao().inapprovesertReplace(KeyValue(key, type, v))
}
inline fun <reified T> liveData(key: String, sticky: B数据库体系的特色oolean = true): MediaapprovetorLiveData<T> {
var realSticky = sticky
val type = T:安全期:class.simpljava怎样读eName ?: ""
val mld = Mediato安全rLiveData<T>()
mld.addSource(database.dao().liveData(key, type)) {
if (reajavascriptlSticky)数据库原理 {
mld.value = try {
Gson().fromJson(it, T::class.ja数据库体系概论va)
} catch (e: Throwable) {
null
}
} else {
realSticky = true
}
}
return mld
}
}
abstract fun dao(): KeyValueDao
}
@Entity(primaryKeys = ["key", "type"])
data c数据库体系概论lass KeyValapp安装下载ue(
@ColumnInf数据库办理体系o(name = "key", defaultValu安全e = "")
var key: String = "",
@ColumnInfo(name = "type", defaultValue = "")
var type: String = "",
@ColumnInfo(n数据库原理ame = "value", defau安全教育渠道登录ltValue = "")
vaapproachr value: String = ""
)
@Dao
abstract class Kejava环境变量配置yValueDao : BaseDao<KeyValue>() {
@Query("SELECT value from KeyValue WHERE `key` = :key AND type = :type")
abstract fun geapplicationt(key: String, type: String): String
@Query("SELECT value from数据库体系工程师 KeyValue WHERE `keyjson怎样读` = :key AND type = :type")
abstract fun liveData(key:数据库 String, type: String): LiveData<String>
@Insert(onConflict = OnConflictStrategy.REPLACAPPE)
abstract fun insertReplace(obj: KeyValue): Long
}

最终

可仿制代码或许根据该思路扩展