android: SharedPreferences實現記住密碼功能

來源:互聯網
上載者:User

標籤:

既然是實現記住密碼的功能,那麼我們就不需要從頭去寫了,因為在上一章中的最佳實 踐部分已經編寫過一個登入介面了,有可以重用的代碼為什麼不用呢?那就首先開啟 BroadcastBestPractice 項目,來編輯一下登入介面的布局。修改 login.xml 中的代碼,如下 所示:

 

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"

android:stretchColumns="1" >

……

<TableRow>

<CheckBox android:id="@+id/remember_pass" android:layout_height="wrap_content" />

 

<TextView android:layout_height="wrap_content" android:text="Remember password" />

</TableRow>

 

<TableRow>

<Button android:id="@+id/login" android:layout_height="wrap_content" android:layout_span="2" android:text="Login" />

</TableRow>

</TableLayout>

這裡使用到了一個新控制項,CheckBox。這是一個複選框控制項,使用者可以通過點擊的方 式來進行選中和取消,我們就使用這個控制項來表示使用者是否需要記住密碼。

然後修改 LoginActivity 中的代碼,如下所示:

 

 public class LoginActivityextends BaseActivity {

 

private SharedPreferences pref;

 

private SharedPreferences.Editor editor;

 

private EditText accountEdit; privateEditText passwordEdit; private Button login;

private CheckBox rememberPass;

 

@Override

protected voidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.login);

pref =PreferenceManager.getDefaultSharedPreferences(this); accountEdit = (EditText)findViewById(R.id.account); passwordEdit = (EditText)findViewById(R.id.password); rememberPass = (CheckBox)findViewById(R.id.remember_pass); login = (Button) findViewById(R.id.login);

boolean isRemember = pref.getBoolean("remember_password",false);

if (isRemember) {

// 將帳號和密碼都設定到文字框中

String account = pref.getString("account",""); String password = pref.getString("password",""); accountEdit.setText(account); passwordEdit.setText(password);

rememberPass.setChecked(true);

}

login.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String account =accountEdit.getText().toString(); String password =passwordEdit.getText().toString();

if (account.equals("admin") && password.equals("123456")) {

editor = pref.edit();

if (rememberPass.isChecked()) { // 檢查複選框是否被選中

 

editor.putBoolean("remember_password",true); editor.putString("account", account);editor.putString("password", password);

} else {

editor.clear();

}

editor.commit();

Intent intent = newIntent(LoginActivity.this, MainActivity.class);

startActivity(intent);

finish();

} else {

Toast.makeText(LoginActivity.this, "account or password isinvalid", Toast.LENGTH_SHORT).show();

}

}

});

}

 

}

可以看到,這裡首先在 onCreate()方法中擷取到了 SharedPreferences 對象,然後調用它 的 getBoolean()方法去擷取 remember_password 這個鍵對應的值,一開始當然不存在對應的 值了,所以會使用預設值 false,這樣就什麼都不會發生。接著在登入成功之後,會調用 CheckBox 的 isChecked()方法來檢查複選框是否被選中,如果被選中了表示使用者想要記住密 碼,這時將 remember_password 設定為 true,然後把 account 和 password 對應的值都存入到 SharedPreferences 檔案當中並提交。如果沒有被選中,就簡單地調用一下 clear()方法,將 SharedPreferences 檔案中的資料全部清除掉。

當使用者選中了記住密碼複選框,並成功登入一次之後,remember_password 鍵對應的值 就是 true 了,這個時候如果再重新啟動登入介面,就會從 SharedPreferences 檔案中將儲存的帳號和密碼都讀取出來,並填充到文本輸入框中,然後把記住密碼複選框選中,這樣就完成 記住密碼的功能了。

現在重新運行一下程式,可以看到介面上多出了一個記住密碼複選框, 6.9 所示。

圖   6.9

 

然後帳號輸入 admin,密碼輸入 123456,並選中記住密碼複選框,點擊登入,就會跳轉到 MainActivity。接著在 MainActivity 中發出一條強制下線廣播會讓程式重新回到登入介面, 此時你會發現,帳號密碼都已經自動填滿到介面上了, 6.10 所示。

 

圖   6.10

 

這樣我們就使用 SharedPreferences 技術將記住密碼功能成功實現了,你是不是對SharedPreferences 理解得更加深刻了呢?不過需要注意,這裡實現的記住密碼功能仍然還只是個簡單的樣本,並不能在實際的項

目中直接使用。因為將密碼以明文的形式儲存在 SharedPreferences 檔案中是非常不安全的,很容易就會被別人盜取,因此在正式的項目裡還需要結合一定的密碼編譯演算法來對密碼進行保護才行。

android: SharedPreferences實現記住密碼功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.