欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 文件存儲與SharedPreferences存儲方式詳解用法

 更新時間:2021年10月26日 10:20:30   作者:低吟不作語  
SharedPreferences是安卓平臺上一個輕量級的存儲類,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時,將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時,再從SharedPreferences中將值取出

持久化技術(shù)簡介

數(shù)據(jù)持久化就是指將那些內(nèi)存中的瞬時數(shù)據(jù)保存到存儲設(shè)備中,保證即使在手機(jī)或計算機(jī)關(guān)機(jī)的情況下,這些數(shù)據(jù)也不會丟失。保存在內(nèi)存中的數(shù)據(jù)是處于瞬時狀態(tài)的,而保存在存儲設(shè)備的數(shù)據(jù)是處于持久狀態(tài)的。持久化技術(shù)提供了一種機(jī)制,可以讓數(shù)據(jù)在瞬時狀態(tài)和持久狀態(tài)之間進(jìn)行切換

文件存儲

1. 將數(shù)據(jù)存儲到文件中

文件存儲是 Android 中最基本的數(shù)據(jù)存儲方式,它不對存儲的內(nèi)容進(jìn)行格式化處理,所有數(shù)據(jù)都是原封不動的保存到文件當(dāng)中,適合存儲一些簡單的文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)

Context 類提供了一個 openFileOutput() 方法,可以將數(shù)據(jù)存儲到指定的文件中

fun save(inputText: String) {
    try {
        val output = openFileOutput("data", Context.MODE_PRIVATE)
        val writer = BufferedWriter(OutputStreamWriter(output))
        writer.use {
            it.write(inputText)
        }
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

openFileOutput() 方法接收兩個參數(shù):

  • 第一個參數(shù)是文件名,在文件創(chuàng)建的時候使用。指定的文件名可以不包含路徑,因為所有的文件都默認(rèn)存儲到 /data/data/<package name>/files/ 目錄下
  • 第二個參數(shù)是文件的操作模式,主要有 MODE_PRIVATEMODE_APPEND 兩種模式可選,默認(rèn)是 MODE_PRIVATE,表示當(dāng)指定相同文件名時,所寫入的內(nèi)容將會覆蓋原文件的內(nèi)容。而 MODE_APPEND 則表示如果文件存在,就往文件追加內(nèi)容

2. 從文件中讀取數(shù)據(jù)

類似于將數(shù)據(jù)存儲到文件中,Context 類提供了一個 openFileInput() 方法,用于從文件中讀取數(shù)據(jù)

fun load(): String {
    val content = StringBuilder()
    try {
        val input = openFileInput("data")
        val reader = BufferedReader(InputStreamReader(input))
        reader.use {
            reader.forEachLine {
                content.append(it)
            }
        }
    } catch (e: IOException) {
        e.printStackTrace()
    }
    return content.toString()
}

openFileInput() 方法只接收一個參數(shù),即要讀取的文件名,然后系統(tǒng)自動到 /data/data/<package name>/files 目錄下加載這個文件

SharedPreferences 存儲

不同于文件存儲,SharedPreferences 是使用鍵值對的方式來存儲數(shù)據(jù)的。也就是說,當(dāng)保存一條數(shù)據(jù)時,需要給這條數(shù)據(jù)提供一個對應(yīng)的鍵。SharedPreferences 支持多種不同的數(shù)據(jù)類型存儲。

1. 將數(shù)據(jù)存儲到 SharedPreferences 中

要想使用 SharedPreferences,首先要獲得 SharedPreferences 對象。Android 中主要提供以下兩種方法用于得到 SharedPreferences 對象:

  • Context 類中的 getSharedPreferences() 方法,此方法接收兩個參數(shù):第一個參數(shù)指定 SharedPreferences 文件的名稱,存放在 /data/data/<package name>/shared_prefs/ 目錄下;第二個參數(shù)指定操作模式,目前只有 MODE_PRIVATE 可選,表示只有當(dāng)前應(yīng)用程序才可以對這個 SharedPreferences 文件進(jìn)行讀寫
  • Activity 類中的 getPreferences() 方法,它只接受一個操作模式參數(shù),因為使用這個方法會自動將當(dāng)前 Activity 的類名作為 SharedPreferences 的文件名

得到 SharedPreferences 對象之后,就可以開始向 SharedPreferences 存儲數(shù)據(jù)了

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    button.setOnClickListener {
        val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
        editor.putString("name", "Tom")
        editor.putInt("age", 28)
        editor.putBoolean("married", false)
        editor.apply()
    }
}

2. 從 SharedPreferences 中讀取數(shù)據(jù)

SharedPreferences 對象提供了一系列 get 方法,用于讀取存儲的對應(yīng)類型的數(shù)據(jù)。這些 get 方法都接收兩個參數(shù):第一個參數(shù)是鍵,第二個參數(shù)是默認(rèn)值,表示傳入的鍵找不到對應(yīng)的值時以什么樣的默認(rèn)值來返回

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    button.setOnClickListener {
        val prefs = getSharedPreferences("data", Context.MODE_PRIVATE)
        val name = prefs.getString("name", "")
        val age = prefs.getInt("age", 0)
        val married = prefs.getBoolean("married", false)
    }
}

到此這篇關(guān)于Android 文件存儲與SharedPreferences存儲方式詳解用法的文章就介紹到這了,更多相關(guān)Android 存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論