SharePreference 用來 放置 Local 的資料 , 在不同的 Activity 或 Fragment ,只要實例化 SharePreference ,就可以共用資料
調用 context.getSharedPreferences 會返回一個接口 (Interface), 利用這個接口 取得單例的 sharedPreference 物件, 我們可以 去 存取或變更 preference data , context.getSharedPreferences 傳入的第一個參數 是存在 手機的檔案名稱 ,另一個參數 是存取模式 MODE_PRIVATE , 這個參數的意義是使用範圍限 這個 application
透過 edit () 取得進行修改的 Editor 物件
利用 Editor 物件存放資料 (put) , 在放置時需加上 tag , 如下 tag 為 "money"
可以放置的 Type 有 Boolean Float Int Long String
利用 sharedPreference 物件提取資料 (get) 在提取時需加上 要提取資料的 tag , 如下 tag 為 "money" ,提取出 來的資料為 savemoney 放入的資料
可以提取的 Type 有 Boolean Float Int Long String
利用 Editor 清除所有資料 (put) clear()+commit()
class SaveUserMoney(context: Context) {
// (1
private val pref = context.getSharedPreferences("Total", Context.MODE_PRIVATE)
// (2
val editor = pref.edit()
// (3
fun savemoney(money: String) {
editor.putString("money", money ).apply()
}
// (4
fun getmoney() :String?{
return pref.getString("money","")
}
// (5
fun delete(){
editor.clear().commit()
}
}
建立 我們自己寫好的 SaveUserMoney class 物件
調用 物件裡面的 savemoney function , function 內 Editor 物件 調用putString() 放置傳入的變數 money 指向的 value ,和預設傳入的 value ,再調用 apply() 去完成儲存動作
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// (1
val pref = SaveUserMoney(this)
val money = "x"
// (2
pref.savemoney(money)
}
}
建立 我們寫好的 SaveUserMoney class 物件
調用 物件裡面的 getmoney function , function 內 會從 sharedPreference 物件 ( sharedPreference 調用getString() 傳入 我們要找的資料所擁有的 tag , 和回傳的預設值, 回傳 tag 相對應的資料 )得到我們所需要的資料, getmoney function 再回傳得到的值
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
// (1
val pref = SaveUserMoney(this)
// (2
val money= pref.getmoney()
}
建立 我們寫好的 SaveUserMoney class 物件
調用 物件裡面的 delete() function , function 內會 Editor 物件 調用 clear() 再commit() , 去清空所有資料
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
// (1
val pref = SaveUserMoney(this)
// (2
val money= pref.delete()
}