各位早( # ゚∀゚ )
又到了行雲者行動軟體應用組的文章發表時間了呢!
相信上次的文章應該不會寫太難吧?憑各位的資質一定是沒問題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
由於這個功能我也沒有寫過幾次,一定多少會有些謬誤。
若有思慮不周之處,還請各方前輩不吝指教。

那大概是這樣,希望這篇文章可以幫助正在觀看的你 🙂