- 本篇參考資料《第一行代碼 第三版》 2020.4月出版
- 本篇文章只是本人看書的理解和整理的筆記肆资,更完整的內(nèi)容還在書上
- 尊重原作者 請購買正版圖書
第六章涉及到四大組件中的廣播接收者和廣播發(fā)送者瘫里,目前使用率較低蚁堤,先看第七章的SQLite和其他持久化存儲吧住涉,這個比較重要杖虾。
關(guān)于持久化存儲三種方式条辟,在實際項目操作中肯定是需要進行封裝的弹渔,一般會采用單例模式胳施。這部分只簡單理解基本的使用方法,畢竟再高級的封裝都是從基礎(chǔ)開始的肢专。學(xué)習(xí)完畢后可以自己嘗試進行封裝或者去參考比較成熟的封裝方法舞肆。總之博杖,最適合自己的就是最好的椿胯。
一 文件操作
最簡單的文件讀寫,這里保存一個輸入框的字符串剃根,在啟動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.setText(content.toString())
}
這只是最簡單的APP內(nèi)部文件操作例子哩盲,我這里想補充一下,首先Android上的文件讀寫分為兩大類型:APP內(nèi)部和APP外部(SD卡)
APP內(nèi)部文件讀寫
不需要請求權(quán)限狈醉,直接可以進行操作廉油,內(nèi)部讀寫分為保存目錄和緩存目錄
保存目錄:data/data/包名/files
這里可以保存一些重要文件,app卸載時會清空
緩存目錄:data/data/包名/cache
這里可以臨時緩存一些文件苗傅,內(nèi)存不足時系統(tǒng)會清理抒线,app卸載時會清空
APP外部文件讀寫
需要請求SD卡訪問權(quán)限。這里主要是app外部的文件操作金吗,比如SD卡十兢,訪問系統(tǒng)相冊這些操作趣竣。
在使用前需要判斷是否有SD卡可以讀寫。比如有些設(shè)備是外置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該怎么操作宝穗,比如數(shù)據(jù)實體類户秤?(思路:轉(zhuǎn)換為JSON字符串再保存)
注意點3:在項目中使用最好采用單例模式進行封裝
三 SQLite數(shù)據(jù)庫
注意:書上和以下內(nèi)容都只是SQLite數(shù)據(jù)庫的最基本的用法,實際項目使用中逮矛,肯定需要進行封裝的<拧!但是要進行封裝也得從基礎(chǔ)開始须鼎,繼續(xù)吧鲸伴。
實際使用過程中,應(yīng)該是直接傳入數(shù)據(jù)實體類對象到封裝的方法中進行保存晋控。當(dāng)然也會有查詢數(shù)據(jù)轉(zhuǎn)化為數(shù)據(jù)實體類等問題汞窗。
封裝參考:https://blog.csdn.net/tywfeng/article/details/86653875