Android開發(fā)(六)| 輕松實(shí)現(xiàn)“記住密碼”

日常使用經(jīng)驗(yàn)告訴我們,無論是在電腦網(wǎng)頁還是掌上app,幾乎所有需要注冊(cè)、登錄的交互式應(yīng)用軟件都自帶了一個(gè)方便用戶上線的功能:記住密碼

記得我上初中那會(huì)兒正流行QQ升級(jí),同伴間很愛比較誰的Q“太陽”“月亮”多。我每天回家開機(jī),屏幕會(huì)自動(dòng)彈出QQ登錄界面,一鍵登錄然后掛機(jī)在后臺(tái)等待升級(jí).....“記住密碼”功能可以說是短小精悍的,即不復(fù)雜又對(duì)用戶友好。

它的實(shí)現(xiàn)只需借助于android中的數(shù)據(jù)持久化技術(shù)。所謂數(shù)據(jù)持久化,就是將那些內(nèi)存中的瞬時(shí)數(shù)據(jù)保存到存儲(chǔ)設(shè)備中,這樣一來即使手機(jī)、PC關(guān)機(jī),這些數(shù)據(jù)也不會(huì)丟失。

通過這一技術(shù),我們來看一個(gè)實(shí)際案例。這是某個(gè)應(yīng)用程序的登錄界面,界面上有一個(gè)記住密碼的復(fù)選框,它的功能就是我們想要的。

登錄界面

然后我們輸入已經(jīng)設(shè)置好的賬號(hào):Andy,再輸入密碼:119864(賬號(hào)密碼可以自定義,這里僅是舉例),并選中記住密碼的復(fù)選框。點(diǎn)擊登錄就會(huì)跳轉(zhuǎn)到程序中的主頁面。

這時(shí)如果退出程序,再重新進(jìn)入登錄頁面,會(huì)發(fā)現(xiàn)賬號(hào)密碼已經(jīng)自動(dòng)填充到界面上了:

程序已“記住”賬號(hào)密碼

Android系統(tǒng)中主要有三種方式用于實(shí)現(xiàn)數(shù)據(jù)持久化功能,分別是文件存儲(chǔ)、SharedPreference存儲(chǔ)、數(shù)據(jù)庫存儲(chǔ)(SQLite)。“記住密碼”功能可以通過相對(duì)最簡單的SharedPreference存儲(chǔ)方式實(shí)現(xiàn)。新建一個(gè)項(xiàng)目工程,我們馬上來實(shí)際操作一遍吧。

一、登錄界面的布局

布局設(shè)計(jì)、控件使用對(duì)我們應(yīng)該已經(jīng)易如反掌了。具體你可以回頭參考《Android開發(fā)(二)| 編寫程序界面》

本界面我們使用TableLayout布局,即表格的方式來排列控件,清晰直觀。activity_main.xml中的代碼如下:

activity_main.xml
接上頁

這時(shí)我們運(yùn)行下程序,大致效果已經(jīng)出來了,不過看上去總覺得有點(diǎn)怪怪的:

運(yùn)行結(jié)果 1st

不和諧的地方有兩個(gè):

1)標(biāo)題“歡迎登錄”和按鈕“Login”只占據(jù)一列,會(huì)顯得表格結(jié)構(gòu)不合理;

2)當(dāng)前界面并沒有充分利用屏幕的寬度,即便占據(jù)了兩列,右側(cè)還是空出了一塊區(qū)域。

對(duì)此我們有相應(yīng)的兩個(gè)解決方案:

1)合并單元格,使用 android:layout_span="2" 讓登錄按鈕和標(biāo)題占據(jù)兩列的空間,以保證表結(jié)構(gòu)的合理。

2)在<TableLayout>中使用 android:stretchColumns="1" ,將TableLayout中的第二列進(jìn)行拉伸,以實(shí)現(xiàn)自動(dòng)適應(yīng)屏幕寬度。

現(xiàn)在重新運(yùn)行一下程序,模擬機(jī)上顯示出的效果就正常合理了:

運(yùn)行結(jié)果 2nd

二、將數(shù)據(jù)存儲(chǔ)到SharedPreferences

SharedPreferences是使用鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù)。當(dāng)保存一條數(shù)據(jù)時(shí),需要給這條數(shù)據(jù)提供一個(gè)對(duì)應(yīng)的鍵;讀取數(shù)據(jù)時(shí)即通過這個(gè)鍵把值取出。SharedPreferences還支持多種不同數(shù)據(jù)類型的存儲(chǔ)。

1)獲取SharedPreferences對(duì)象

想使用SharedPreferences存儲(chǔ)數(shù)據(jù),首先要獲取它的對(duì)象Android主要提供了三種方法得到此對(duì)象,我們這兒選擇最常用的Context類中的getSharedPreferences()方法。

此方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)用于指定SharedPreferences文件的名稱(不存在則會(huì)創(chuàng)建一個(gè)),SharedPreferences文件均存放在/data/data/<package name>/shared_prefs/目錄下;第二個(gè)參數(shù)用于指定操作模式,默認(rèn)選用MODE_PRIVATE,表示僅當(dāng)前應(yīng)用程序可以對(duì)這個(gè)SharedPreferences文件進(jìn)行讀寫。

2)向SharedPreferences文件中存數(shù)據(jù)

可以分三步實(shí)現(xiàn)數(shù)據(jù)存放:

·1 ?調(diào)用SharedPreferences對(duì)象的edit()方法獲取一個(gè)SharedPreferences.Editor對(duì)象;

·2 向SharedPreferences.Editor對(duì)象添加數(shù)據(jù)。如添加字符串,就使用putString(),以此類推;

·3 調(diào)用commit()方法將添加的數(shù)據(jù)提交,完成數(shù)據(jù)存儲(chǔ)。

理論說明先到此,將上述過程在主活動(dòng)登錄按鈕的響應(yīng)事件中代碼化,如下:

寫入數(shù)據(jù)到SharedPreferences
接上頁

可以看到,我們把輸入的賬號(hào)(Andy)、密碼(119864)、復(fù)選框選中信息通過各自的鍵,都傳入了SharedPreferences.Editor的對(duì)象editor;如果賬號(hào)/密碼不正確,就提示一句“賬號(hào)/密碼不合法”。最后通過鍵值,把數(shù)據(jù)讀取出來并顯示就ok了。

三、從SharedPreferences中讀取數(shù)據(jù)

相當(dāng)于存儲(chǔ)數(shù)據(jù),讀取就顯得非常簡單了。對(duì)應(yīng)SharedPreferences.Editot的put方法,SharedPreferences對(duì)象提供了一系列get方法用于讀取存儲(chǔ)數(shù)據(jù),如讀取一個(gè)字符串,就用getString()方法。

這些get方法統(tǒng)一接收兩個(gè)參數(shù):第一個(gè)是鍵,傳入存儲(chǔ)數(shù)據(jù)時(shí)用的鍵就可得到相應(yīng)值;第二個(gè)是默認(rèn)值,表示當(dāng)傳入的鍵找不到對(duì)應(yīng)值時(shí),以怎樣的默認(rèn)值返回。

在主活動(dòng)的onCreate()函數(shù)中,先判斷復(fù)選框是否選中;若選中則直接把賬號(hào)、密碼讀取顯示在頁面中。在原有基礎(chǔ)上,往onCreate()添加這段簡潔明了的代碼即可:

讀取數(shù)據(jù)

現(xiàn)在我們“記住密碼”的功能已經(jīng)順利實(shí)現(xiàn)了。登錄成功后,將跳轉(zhuǎn)至具體的應(yīng)用界面,我們可以在其中自定義需要實(shí)現(xiàn)的邏輯和功能,此處不再贅余。

記住密碼

本章小結(jié):這一章是Android數(shù)據(jù)持久化的一次小實(shí)戰(zhàn),目的是認(rèn)識(shí)數(shù)據(jù)存儲(chǔ)的過程和它的重要性。對(duì)于一些關(guān)鍵性的數(shù)據(jù)信息,因程序關(guān)閉而丟失信息是絕對(duì)不能容忍的。

假設(shè)我們剛發(fā)了一條朋友圈,結(jié)果刷新一下就沒了,實(shí)在是炒蛋吧?這就需要數(shù)據(jù)持久化技術(shù)的支持了。

本文只是拋磚引玉,實(shí)際開發(fā)中不可能如此簡單的存儲(chǔ)密碼,一定還經(jīng)過諸如加密、封裝等步驟。但是如果讀完全文讀者對(duì)數(shù)據(jù)存儲(chǔ)已經(jīng)有了初步的認(rèn)識(shí),那么我的目的已經(jīng)達(dá)到了!


點(diǎn)贊表明您已閱(?ω?)

作者:葉琛

一個(gè)癡迷旅行的IT程序狗

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,629評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,976評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評(píng)論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,139評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,411評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,641評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,820評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評(píng)論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,362評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,604評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容