SharedPreferences實現自動登陸記住用戶名密碼

最近Android項目須要一個自動登陸功能,完成以後,特總結一下,此功能依靠SharedPreferences進行實現。
 
SharedPreferences簡介
SharedPreferences也是一種輕型的數據存儲方式,它的本質是基於XML文件存儲key-value鍵值對數據,一般用來存儲一些簡單的配置信息。其存儲位置在/data/data/<包名>/shared_prefs目錄下。SharedPreferences對象自己只能獲取數據而不支持存儲和修改,存儲修改是經過Editor對象實現。
 
SharedPreferences使用實例:記住用戶名密碼自動登陸
大體瞭解了SharedPreference以後,接下來看個記住用戶名密碼自動登陸的例子:
 
package com.dt5000.ischool.activity;  
import android.annotation.SuppressLint;  
import android.content.Context;  
import android.content.Intent;  
import android.content.SharedPreferences;  
import android.content.SharedPreferences.Editor;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.KeyEvent;  
import android.view.View;  
import android.widget.CheckBox;  
import android.widget.EditText;  
import com.dt5000.ischool.util.DTUtil;  
import com.dt5000.ischool.util.MyApplication;   
/** 
 * @author: duanyr 
 * @建立時間: 2012-11-13 下午2:36:47 
 *  
 * @類說明:登陸界面 
 */  
@SuppressLint("WorldReadableFiles")  
public class LoginActivity extends DTUtil {  
    private static final String TAG = "用戶登陸";  
    private EditText username;  
    private EditText password;  
    private CheckBox autoLogin;  
    private SharedPreferences sharedPreferences;  
    private String message;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        MyApplication.getInstance().addActivity(this);  
        sharedPreferences = this.getSharedPreferences("userInfo",Context.MODE_WORLD_READABLE);  
        if (sharedPreferences.getBoolean("AUTO_ISCHECK", false)) {  
            Intent intent = new Intent();  
            intent.setClass(LoginActivity.this, MainActivity.class);  
            startActivity(intent);  
        } else {  
            setContentView(R.layout.activity_login);  
            initView();  
        }  
    }  
    /** 
     * 初始化視圖控件 
     */  
    public void initView() {  
        Log.i(TAG, "初始化視圖控件");  
        username = (EditText) findViewById(R.id.username);  
        password = (EditText) findViewById(R.id.password);  
        autoLogin = (CheckBox) findViewById(R.id.autoLogin);  
        // 默認記住用戶名  
        username.setText(sharedPreferences.getString("userName", ""));  
    }  
    /** 
     * 點擊登陸按鈕時觸發的方法 
     * @param view 
     */  
    public void userLogin(View view) {  
        String usernameString = username.getText().toString();  
        String passwordString = password.getText().toString();  
  
        if (validateUser(usernameString, passwordString)) {  
  
            Editor editor = sharedPreferences.edit();  
            editor.putString("userName", usernameString);  
              
            if (autoLogin.isChecked()) {// 自動登陸  
                editor.putString("password", passwordString);  
                editor.putBoolean("AUTO_ISCHECK", true).commit();  
            }  
            editor.commit();  
            Intent intent = new Intent();  
            intent.setClass(LoginActivity.this, MainActivity.class);  
            startActivity(intent);  
        } else {  
            alert(this, message);  
        }  
    }  
    //遊客登陸  
    public void visitorLogin(View view) {  
        Intent intent = new Intent();  
        intent.setClass(LoginActivity.this, MainActivity.class);  
        startActivity(intent);  
    }  
    /** 
     * 驗證用戶名密碼是否正確 
     *  
     * @param username 
     * @param password 
     * @return 
     */  
    public boolean validateUser(String username, String password) {  
        Boolean flag = false;  
        try {  
            //...此處爲調用web服務,驗證用戶名密碼的服務,特此省略  
            flag = true;  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            Log.e(TAG, e.getMessage());  
            message = "鏈接服務器失敗";  
        }  
        return flag;  
    }  
    /** 
     * 點擊退出按鈕時觸發的方法 
     */  
    public void logout_listener(View view) {  
        dialog_Exit(this);  
    }  
    /** 
     * 監聽返回按鈕,此爲登陸界面再返回的話給出退出提示 
     */  
    public boolean onKeyDown(int keyCode, KeyEvent event) {  
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {  
            dialog_Exit(this);  
            return false;  
        }  
        return false;  
    }  
}  

頁面截圖:
相關文章
相關標籤/搜索