我們在 onCreate 建立 Button 的 Listener 並分別放入相對的 function
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
saveBtn.setOnClickListener { save() }
nextBtn.setOnClickListener { next() }
}
val userName = nameEditText.text.toString()
val sharePreferences = getSharedPreferences("userName", Context.MODE_PRIVATE)
val shareEditor = sharePreferences.edit()
我們透過 getSharedPreferences 來建立新的設定檔
第一個參數用來定義設定檔檔名
第二個參數用來設定使用權限
MODE_PRIVATE 指的是只允許本應用程式使用,是最常使用的參數
想要知道更多其他參數可以到官網查詢
接下來我們會實作 sharePreferences.edit() 所有有關資料的儲存、讀取、刪除都需要透過這個 Editor
SharePreference 是透過 key - value 的方式來儲存資料,如下
shareEditor.putString("userName", userName).apply()
我們透過 Editor 把 userName 這個值存起來而他的 Key 則是 "userName"
最後切記一定要 apply() 或 commit()
private fun save() {
val userName = nameEditText.text.toString()
val sharePreferences = getSharedPreferences("userName", Context.MODE_PRIVATE)
val shareEditor = sharePreferences.edit()
if (userName.isEmpty() or userName.isBlank()) {
Toast.makeText(this, "please enter your name", Toast.LENGTH_SHORT).show()
} else
{
shareEditor.putString("userName", userName).apply()
}
}
我們在 save function 中加入判斷防止使用者沒有輸入值或是輸入空白。
private fun show() {
val sharePreferences = getSharedPreferences("userName", Context.MODE_PRIVATE)
val userName = sharePreferences.getString("userName", "")
showNameTextView.text = userName
}
在顯示使用者姓名的 Activity 中我們可以透過 sharePreference 中的 getString 來獲得存在 preference 的值
第一個參數是 key
第二個參數則是 如果這個 key 沒有對應的 value 他會回應的 value 一般而言預設為 null
apply 與 commit 有幾個差別在於 commit 會回傳 Boolean 顯示動作成功與否,讓設計這能夠做調整。
如果進行很多次 commit 效率也會比較差。
更詳細的 source code 請到 Github