《第一行代码》第七章数据存储全方案详解持久化技术
•本篇参考资料《第一行代码 第三版》 2023.4月出版
•本篇文章只是本人看书的理解和整理的笔记,更完整的内容还在书上
字符串常量池原理•尊重原作者 请购买正版图书
第六章涉及到四大组件中的广播接收者和广播发送者,目前使用率较低,先看第七章的SQLite和其他持久化存储吧,这个比较重要。
关于持久化存储三种方式,在实际项目操作中肯定是需要进行封装的,一般会采用单例模式。这部分只简单理解基本的使用方法,毕竟再高级的封装都是从基础开始的。学习完毕后可以自己尝试进行封装或者去参考比较成熟的封装方法。总之,最适合自己的就是最好的。
一 文件操作
最简单的文件读写,这里保存一个输入框的字符串,在启动activity的时候读取并填写到输入框
    fun save(input: String) {        val output = openFileOutput("data", Context.MODE_PRIVATE)        val writer = BufferedWriter(OutputStreamWriter(output))        writer.use {            it.write(input)        }    }      fun read( {        val content = StringBuilder(        val input = openFileInput("data")        val reader = BufferedReader(InputStreamReader(input))        reader.use {            it.forEachLine {                content.append(it)            }        }        editText.String()    }
这只是最简单的APP内部文件操作例子,我这里想补充一下,首先Android上的文件读写分为两大类型:APP内部和APP外部(SD卡)
APP内部文件读写
不需要请求权限,直接可以进行操作,内部读写分为保存目录和缓存目录 保存目录:data/data/包名/files 这里可以保存一些重要文件,app卸载时会清空 缓存目录:data/data/包名/cache 这里可以临时缓存一些文件,内存不足时系统会清理,app卸载时会清空
APP外部文件读写
需要请求SD卡访问权限。这里主要是app外部的文件操作,比如SD卡,访问系统相册这些操作。 在使用前需要判断是否有SD卡可以读写。比如有些设备是外置SD卡,有时候有,有时候没有。这些都是需要注意的问题。
二 SharedPreferebces单个字段存储
简单用法:
        saveBtn.setOnClickListener {            val sp = getSharedPreferences("data", Context.MODE_PRIVATE)            val editor = sp.edit(            editor.putString("name", "Tom")            editor.putInt("age", 18)            editor.putBoolean("married", false)            editor.apply(            Log.d(TAG, "保存成功")          }        readBtn.setOnClickListener {            val sp = getSharedPreferences("data", Context.MODE_PRIVATE)            Log.d(TAG, sp.getString("name", ""))            Log.d(TAG, sp.getInt("age", 0).toString()            Log.d(TAG, sp.getBoolean("married", false).toString()        }
注意点1:保存列表时,只能保存Set类型,Set的特点是无序 注意点2:保存对象object该怎
么操作,比如数据实体类?(思路:转换为JSON字符串再保存) 注意点3:在项目中使用最好采用单例模式进行封装
三 SQLite数据库
注意:书上和以下内容都只是SQLite数据库的最基本的用法,实际项目使用中,肯定需要进行封装的!但是要进行封装也得从基础开始,继续吧。 实际使用过程中,应该是直接传入数据实体类对象到封装的方法中进行保存。当然也会有查询数据转化为数据实体类等问题。 封装参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。