首页 > 其他分享 >Android 持久化技术

Android 持久化技术

时间:2023-01-17 16:33:56浏览次数:35  
标签:文件 存储 持久 val 技术 inputText Android 数据

持久化技术简介

数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机 的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设 备中的数据是处于持久状态的。持久化技术提供了一种机制,可以让数据在瞬时状态和持久状态之间进行转换。

Android 系统中主要提供了3种方式用于简单地实现数据持久化功能:文件存储、 SharedPreferences 存储以及数据库存储。

文件存储

文件存储是Android 中最基本的数据存储方式,它不对存储的内容进行任何格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合存储一些简单的文本数据或二进制数据。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val inputText = load()
        if (inputText.isNotEmpty()) {
            editText.setText(inputText)
            editText.setSelection(inputText.length)
            Toast.makeText(this, "Restoring succeeded", Toast.LENGTH_SHORT).show()
        }
    }

    // 重写了onDestroy()方法,这样就可以保证在Activity 销毁之前一定会调用这个方法。
    override fun onDestroy() {
        super.onDestroy()
        val inputText = editText.text.toString() // 获取了EditText 中输入的内容
        save(inputText)
    }

    private fun save(inputText: String) {
        try {
            // Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。
            // 这个方法接收两个参数:第一个参数是文件名,在文件创建的时候使用,注意这里指定的文件名不可以包含路径,因为所有的文件都默认存储到/data/data/<package name>/files/ 目录下;
            // 第二个参数是文件的操作模式,主要有MODE_PRIVATE(覆盖)和MODE_APPEND(追加)两种模式可选,默认是MODE_PRIVATE
            // openFileOutput()方法返回的是一个FileOutputStream对象,得到这个对象之后就可以使用Java 流的方式将数据写入文件中了。
            val output = openFileOutput("data", Context.MODE_PRIVATE)
            val writer = BufferedWriter(OutputStreamWriter(output))
            writer.use {
                it.write(inputText)
            }
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }

    private fun load(): String {
        val content = StringBuilder()
        try {
            //Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。
            val input = openFileInput("data")
            val reader = BufferedReader(InputStreamReader(input))
            reader.use {
                reader.forEachLine {
                    content.append(it)
                }
            }
        } catch (e: IOException) {
            e.printStackTrace()
        }
        return content.toString()
    }

}

SharedPreferences存储

不同于文件的存储方式,SharedPreferences 是使用键值对的方式来存储数据的。当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharedPreferences 还支持多种不同的数据类型存储

 

标签:文件,存储,持久,val,技术,inputText,Android,数据
From: https://www.cnblogs.com/ooo0/p/17058109.html

相关文章

  • 小程序容器技术,企业降本增效制胜法宝
    疫情之下,互联网行业感受到了巨大的压力,不少企业从各个维度上都加大了降本增效的力度。而对于APP开发来说,在疫情之前,APP开发市场本身就在蓬勃的扩增之中,而如今唯有做到降低研......
  • 聚焦技术与体验极致提升,阿里云视频云连续5年领跑!
    全球领先的IT市场研究和咨询公司IDC发布《中国视频云市场跟踪(2022上半年)》阿里云连续五年稳居中国视频云整体市场份额第一整体市场份额占比达25.4%近日,全球领先的IT市......
  • 聚焦技术与体验极致提升,阿里云视频云连续5年领跑!
    全球领先的IT市场研究和咨询公司IDC发布《中国视频云市场跟踪(2022上半年)》阿里云连续五年稳居中国视频云整体市场份额第一整体市场份额占比达25.4%近日,全球领先的IT......
  • Android BroadcastReceiver
    Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应用程序的。Androi......
  • 虚拟化技术浅析第二弹之初识Kubernetes
     作者:京东物流杨建民一、微服务架构起源单体架构:可以理解为主要业务逻辑模块(我们编写的代码模块,不包括独立的中间件)运行在一个进程中的应用,最典型的是运行在一个Tomcat容......
  • Android开发 ViewPropertyAnimator动画属性
    前言ViewPropertyAnimator是基于ValueAnimator实现的,这点在ViewPropertyAnimator的源码中的 privatevoidstartAnimation()方法里可以看到。Android的动画实现方式......
  • Android Fragment
    Fragment是什么Fragment是一种可以嵌入在Activity当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用得非常广泛。Fragment的状态得每个Activ......
  • Android 相关
    Android-Project模式的项目结构AndroidActivityAndroidFragment......
  • 技术的本质
    第一章:问题技术给我们带来了舒适的生活和无尽的财富,也成就了经济的繁荣。一句话,我们的世界因技术而改变。但是,技术的本质究竟是什么?它从何而来,又是如何进化的?技......
  • Android之简单控件
    1.1文本显示本小节讲述如何设置文本的大小,内容,颜色,背景对于文本控件来说,用text属性给文本赋值,设置文本的内容,当然最好用String.xml来表示设置文本的大小用textSize表示,......