各位早( # ゚∀゚ )
又到了行雲者行動軟體應用組的文章發表時間了呢!
相信上次的文章應該不會寫太難吧?憑各位的資質一定是沒問題der~
那今天我們再講一個也算是常用的功能,也就是標題所說的Shared Preferences。
相信各位一定都知道資料庫吧!
無論在App、Web的開發,都很常用到資料庫,
雖然資料庫並不難建,語法也是十分平易親人。
但人總是很容易懶癌發作:
「好麻煩喔,只是要記憶基本資料,實在懶得再開一個資料庫。」
那這時候我們就可以用Shared Preferences,
作為簡單的記憶運用~
正文開始
↑範例畫面
這次就從最常見的登入介面來講吧!
我們如果不是用公共電腦,通常就會在登入介面的右下角勾選「記住我」吧
那我們這次就來做做看這樣的功能吧
先請各位在連結Main_Activity的xml上
新增兩個EditText、一個CheckBox
然後就可以進coding階段囉
首先我們先在onCreate()外面寫一個method:
private void checkBoxClick(){
if (checkBoxRemember.isChecked()){
rememberInformation = getSharedPreferences("information",MODE_PRIVATE);
rememberInformation.edit()
.putString(UsernameField,insertUsername.getText().toString())
.putString(PasswordField,insertPassword.getText().toString())
.putInt("DETERMINE",CheckOrNot+1)
.commit();
}
}
上述的code翻成白話文是這樣的:
「如果CheckBox被打勾的話,那它就會在Shared Preferences儲存你在EditText的資訊,如帳號、密碼等。」
懶人包:
「它會記住你。」
getSharedPreferences的第一個參數是你要放置這些資訊的shared preferences名稱,
你可以想成資料庫的table name。
而第二個參數MODE_PRIVATE則是要設定這個shared preferences的使用範圍,
可別以為這玩意只能在這個app使用呢…
這個MODE的參數有一部份是允許這台手機的其他APP都可以使用的,
若寫成那樣是很危險的,所以請記得若沒有其他考量,請寫MODE_PRIVATE。
底下的putString內的參數,第一項你可以想成是資料庫的column name。
第二項則是要放入該column的資料,這裡我們寫的是把EditText的資料轉成String放進去。
而putInt的部分,裡面儲存的資料則是拿來判斷「上次使用者是否有勾選『記住我』」。
不過我的判斷方法寫得很差,只是看這個參數是否值大於零而已。
之後如果有想到更好的寫法會再補充。
最後還請記得要寫commit()它才會執行。
我們再把鏡頭轉到onCreate()身上:
try{
rememberInformation = getSharedPreferences("information",MODE_PRIVATE);
CheckOrNot = rememberInformation.getInt("DETERMINE",0);
//String後面的參數是default值,可以是0或是""
if(CheckOrNot>0){
insertUsername.setText(rememberInformation.getString(UsernameField,""));
insertPassword.setText(rememberInformation.getString(PasswordField,""));
}
}catch(Exception e){
Log.d("d","Error happened at CheckOrNot phase!");
}
這裡做的事情,就是在進入這個畫面時,判斷你上次登入時「是否有勾選『記住我』」。
會先呼叫getSharedPreferences,從"information"將"DETERMINE"儲存的數值抓到CheckOrNot上。
(PS:getInt("DETERMINE",0),後面的0是「DEFAULT值」的意思,也就是說如果沒抓到任何資料,那它就會回傳這個DEFAULT值。底下getString後面的""也是同理,沒抓到東西就會回傳一個空字串)
抓好CheckOrNot值以後,進入if做判斷,如果CheckOrNot大於零的話就會去Shared Prefernces抓取使用者帳號密碼的資料。
那這樣原則上就完成了簡單的「記住我」應用了。
後記
欸…有點不知道該講什麼就是Orz
由於這個功能我也沒有寫過幾次,一定多少會有些謬誤。
若有思慮不周之處,還請各方前輩不吝指教。
那大概是這樣,希望這篇文章可以幫助正在觀看的你 🙂