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

网站建设问题广告外链购买交易平台

网站建设问题,广告外链购买交易平台,网站怎么做百度认证,邢台信息港123招聘DataStore 概念 DataStore 可以存储两种类型的数据,一种是 preference,一种是 protobuf 每个进程在同一时间内仅能打开一个 DataStore 实例(或者通过其他管理手段来实现多个 DataStore 交替使用) 一个 DataStore 可以视为一张数…

DataStore 概念

DataStore 可以存储两种类型的数据,一种是 preference,一种是 protobuf

每个进程在同一时间内仅能打开一个 DataStore 实例(或者通过其他管理手段来实现多个 DataStore 交替使用)

一个 DataStore 可以视为一张数据表


默认存储位置:data/data/com.xxx.xxx/files/datastore/xxx.pb


快速上手

导入依赖:implementation "androidx.datastore:datastore-preferences:1.0.0"


目标

将三个属性 name、age、habit 按照键值对的方式使用 preference 模式存储到本地

实现查询功能


datastore 主文件

新建文件 DataStoreInit.kt 用来初始化 DataStore

首先需要确定 DataStore 的名字,或者可以理解为这个数据表的名字

并使用 kotlin 特有的扩展方法的语法,直接把 dataStore 绑定在全局上下文,即可“一次初始化全局使用”

// 定义DataStore名字
private const val BASIC_DB_NAME = "basic_test"// 全局委托实例化DataStore,接收一个参数,即名字
private val Context.dataStore by preferencesDataStore(name = BASIC_DB_NAME)

我们需要在外部定义键的类型

xxxPreferencesKey 其中的 xxx 代表类型

// 直接定义一组类型时最好这样写
private object PreferencesKeys{// 变量名(大写字符)为开发时使用的键名// 括号内的名字为存储到本地的键名val BASIC_NAME = stringPreferencesKey("basic_name")val BASIC_AGE =  stringPreferencesKey("basic_age")val BASIC_HABIT = stringPreferencesKey("basic_habit")
}

直接定义一个数据类,方便我们后续直接提取出三个数据!

data class basicModel(val name:String,val age:String,val habit:String)

编写新类 DataStoreInit,他接受一个 context 上下文作为初始化形参

所有的 CRUD 操作都在此类中进行!

class DataStoreInit(private val context: Context) {...
}

读取数据

读取数据时需要使用 trycatch 代码块进行异常捕获

// 下面代码是固定格式,不要纠结
val getBasicDB = context.dataStore.data
.catch {e->// 捕获异常并作出处理if(e is IOException){emit(emptyPreferences())}else{throw e}
}.map {preferences ->// 依据键值对的方式提取出存储的值// 格式:preferences[定义的键名]// ?:类似于三元运算,即左侧取出null则直接使用右侧值替换之val name = preferences[PreferencesKeys.BASIC_NAME] ?: "无名氏"val age = preferences[PreferencesKeys.BASIC_AGE] ?: "inf"val habit = preferences[PreferencesKeys.BASIC_HABIT] ?: "清心寡欲乜有爱好"// 把所有数据存储到数据类并将它返回!basicModel(name, age, habit)
}

写入数据

数据写入需要使用挂起函数(故调用该方法时也要使用协程作用域)

// 挂起函数,接收三个参数作为值输入
suspend fun insertBasicDB(name: String,age: String,habit: String):String{return try {// 依据键值对存储即可context.dataStore.edit {preferences ->preferences[PreferencesKeys.BASIC_NAME] = namepreferences[PreferencesKeys.BASIC_AGE] = agepreferences[PreferencesKeys.BASIC_HABIT] = habit}"基础数据插入成功"}catch (e:Exception){println(e)"基础数据插入失败"}
}

主 UI

主页面配置:三个输入框,加一个插入按钮、一个查询按钮、一个清空表单按钮

功能大体解释:

  1. 判断输入框有任意一个为空,则不允许插入
  2. 根据返回值判断成功与否并弹出 Toast
  3. 使用协程作用域 rememberCoroutineScope 进行读写操作
@Composable
fun DataStoreViewInit(navHostController: NavHostController){// 三个主要变量,记得remembervar name by remember {mutableStateOf("tom")}var age by remember {mutableStateOf("100")}var habit by remember {mutableStateOf("play")}// 定义协程作用域,用于数据读写val scope = rememberCoroutineScope()Column(Modifier.fillMaxHeight().fillMaxWidth(),verticalArrangement = Arrangement.Center,horizontalAlignment = Alignment.CenterHorizontally) {TextField(value = name, onValueChange = {name=it}, label = { Text(text = "用户名")})TextField(value = age, onValueChange = {age=it}, label = { Text(text = "年龄")})TextField(value = habit, onValueChange = {habit=it}, label = { Text(text = "密码")})// 保存数据按钮Button(onClick = {// 判断编辑框均非空if(name!==""&&age!==""&&habit!==""){scope.launch {// 保存数据val res = DataStoreInit(MainContext).insertBasicDB(name, age, habit)DialogUtil(MainContext).showSimpleToast(res)}}else{DialogUtil(MainContext).showSimpleToast("请填完所有信息!!!")}}) {Text(text = "提交信息")}// 查询数据按钮Button(onClick = {try {scope.launch {// 查询数据// 由于挂起函数返回类型为一个flow类型对象,所以使用collect取出值即可DataStoreInit(MainContext).getBasicDB.collect {name = it.nameage = it.agehabit = it.habit}}DialogUtil(MainContext).showSimpleToast("已经取出数据!")}catch (e:Exception){DialogUtil(MainContext).showSimpleToast("完蛋了找不到数据!")}}) {Text(text = "查询信息")}// 清空表单按钮Button(onClick = {name=""age=""habit=""}) {Text(text = "清空表单")}}
}

补上一个我封装的弹出 Toast 的小工具类

class DialogUtil(private val context: Context) {fun showSimpleToast(str:String){Toast.makeText(context,str,Toast.LENGTH_SHORT).show()}
}

http://www.mnyf.cn/news/43134.html

相关文章:

  • 水资源论证网站建设哈尔滨优化网站方法
  • 江西省新冠肺炎疫情seo基础优化包括哪些内容
  • 响应式网站建设福州百度指数数据分析平台入口
  • 简繁网站怎么做今天发生的重大新闻内容
  • 网站做的不好会有什么后果网站关键词排名
  • 东阿做网站推广长沙做引流推广的公司
  • 网站独立开发个人怎么在百度上打广告
  • 自建网站营销公司如何在百度宣传
  • 网站建设结束的售后服务百度收录量
  • wordpress建站服务器seo外链优化策略
  • 林州网站建设百度推广怎么开户
  • 浙江品牌网站建设长沙百度关键词推广
  • 给人做网站的百度广告点击一次多少钱
  • mac可以做网站开发吗优质友情链接
  • 佛山营销型网站建设公司跨境电商平台注册开店流程
  • 某企业网站建设论文宁德市人民医院
  • 做网站的视频教程网站收录登录入口
  • 企业网站建设公司名称百度新闻官网
  • 南昌高端网站开发费用表如何seo推广
  • 一台ip做两个网站百度网盟
  • 网站建设服务那一个便宜海外网站
  • 如何利用java工具做网站seo排名优化软件有
  • 校园网站建设系统设计互动营销的案例有哪些
  • 购买域名做销售网站可以吗军事网站大全军事网
  • 一个叫mit做app的网站怎么推广一个app
  • 名词解释响应式网页设计seo jsbapp9
  • 做网站怎么和广告公司合作厦门百度竞价
  • 一个旅游网站怎么做护肤品推广软文
  • 建网站做相亲交换友情链接的意义是什么
  • 郑州营销型网站制作运营靠谱的代运营公司