1. 程式人生 > >利用SharedPreferences做的自動登入的小Demo

利用SharedPreferences做的自動登入的小Demo

效果圖:

 

程式碼如下:

AutoLogin.java

package com.zhiyuan3g.sharedpreferences;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class AutoLogin extends AppCompatActivity implements View.OnClickListener {

    private EditText editText3;
    private EditText editText4;
    private CheckBox checkBox;
    private CheckBox checkBox2;
    private Button button3;
    private Button button4;
    private boolean remenberNum = false;
    private boolean autoLogin = false;
    private SharedPreferences mSharedPreferences;
    private String mEditText3;
    private String mEditText4;
    private SharedPreferences.Editor mEdit;
    private String mPassword;
    private String mUsernaem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_auto_login);
        initView();
    }

    private void initView() {
        editText3 = (EditText) findViewById(R.id.editText3);
        editText4 = (EditText) findViewById(R.id.editText4);
        checkBox = (CheckBox) findViewById(R.id.checkBox);
        checkBox2 = (CheckBox) findViewById(R.id.checkBox2);
        button3 = (Button) findViewById(R.id.button3);
        button4 = (Button) findViewById(R.id.button4);

        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
        //得到全域性的SharedPreferences物件,因為後面要用很多,所以直接定義成全域性變數
        mSharedPreferences = getSharedPreferences("zhiyuan", MODE_PRIVATE);
        //得到全域性的SharedPreferences的edit物件,因為後面要用很多,所以直接定義成全域性變數
        mEdit = mSharedPreferences.edit();
        //通過SharedPreferences物件獲取檔案中鍵名為remenberNumde、autoLogin的兩個布林值。
        //這兩個值是我們儲存的是記住密碼和自動登入的兩個狀態值
        boolean remenberNum1 = mSharedPreferences.getBoolean("remenberNum", false);
        boolean autoLogin1 = mSharedPreferences.getBoolean("autoLogin", false);
        //獲取我們以前存入的使用者名稱和密碼
        mUsernaem = mSharedPreferences.getString("username", "");
        mPassword = mSharedPreferences.getString("password", "");
        //判斷記住密碼的狀態值是否為true,true則進入if裡面,否則進入else裡面
        if (remenberNum1) {
            //將我們獲取的使用者名稱和密碼資料設定給相應的EditText
            editText3.setText(mUsernaem);
            editText4.setText(mPassword);
            //設定第一個checkBox為選中狀態(即記住密碼的checkBox),作用是還原以前記住密碼的狀態
            checkBox.setChecked(true);
            //再判斷自動登入的狀態值是否為true,true則進入if裡面
            if (autoLogin1) {
                //還原自動登入的checkBox的狀態
                checkBox2.setChecked(true);
                //彈吐司提示自動登入成功
                Toast.makeText(getApplicationContext(), "自動登入成功", Toast.LENGTH_SHORT).show();
                //通過intent意圖,跳轉到指定登入成功的頁面
                Intent intent = new Intent(getApplicationContext(), Other.class);
                startActivity(intent);
            }
        } else {
            //再判斷自動登入的狀態值是否為true,true則進入if裡面
            if (autoLogin1) {
                //還原記住密碼的checkBox的狀態
                checkBox.setChecked(true);
                //還原自動登入的checkBox的狀態
                checkBox2.setChecked(true);
                //將我們獲取的使用者名稱和密碼資料設定給相應的EditText
                editText3.setText(mUsernaem);
                editText4.setText(mPassword);
                //彈吐司提示自動登入成功
                Toast.makeText(getApplicationContext(), "自動登入成功", Toast.LENGTH_SHORT).show();
                //通過intent意圖,跳轉到指定登入成功的頁面
                Intent intent = new Intent(getApplicationContext(), Other.class);
                startActivity(intent);
            }

        }
    }

    /**
     * function:按鈕的點選監聽
     * @param v
     */

    @Override
    public void onClick(View v) {
        //在此處獲取EditText輸入框類的文字,即使用者名稱和密碼
        // 切忌不可在初始化內獲取,我們需要通過按鈕監聽實時獲得文字值
        mEditText3 = editText3.getText().toString();
        mEditText4 = editText4.getText().toString();
        //對字串的非空判斷
        if (submit()) {
            switch (v.getId()) {
                //當點選註冊按鈕時,進入button3的監聽處理
                case R.id.button3:
                    //首先先把輸入文字的使用者名稱和密碼通過SharedPreferences的edit物件存入
                    mEdit.putString("username", mEditText3);
                    mEdit.putString("password", mEditText4);
                    //切忌,不要忘記提交,不提交無效
                    mEdit.commit();
                    //彈吐司提示註冊成功
                    Toast.makeText(getApplicationContext(), "恭喜,註冊成功", Toast.LENGTH_SHORT).show();
                    break;
                //當點選登入按鈕時,進入button4的監聽處理
                case R.id.button4:
                    //首先先把使用者名稱和密碼通過SharedPreferences物件獲取出來
                    mUsernaem = mSharedPreferences.getString("username", "");
                    mPassword = mSharedPreferences.getString("password", "");
                    //判斷此時輸入框EditText中的內容是否與我們獲取出來的使用者名稱和密碼相同,相同進入if裡面
                    if (mUsernaem.equals(mEditText3) && mPassword.equals(mEditText4)) {
                        //彈吐司提示登入成功
                        Toast.makeText(getApplicationContext(), "登入成功", Toast.LENGTH_SHORT).show();
                        //判斷記住密碼和自動登入的checkBox是否被勾選
                        if (checkBox.isChecked() && !checkBox2.isChecked()) {
                            //將記住密碼的狀態設定為true
                            remenberNum = true;
                            //將自動登入的狀態設定為false,以下類推,就不一一寫了
                            autoLogin = false;

                        } else if (!checkBox.isChecked() && !checkBox2.isChecked()) {
                            remenberNum = false;
                            autoLogin = false;

                        } else if (!checkBox.isChecked() && checkBox2.isChecked()) {
                            remenberNum = false;
                            autoLogin = true;

                        } else if (checkBox.isChecked() && checkBox2.isChecked()) {
                            remenberNum = true;
                            autoLogin = true;
                        }
                        //將我們剛剛得到的記住密碼和自動登入的狀態儲存下來
                        mEdit.putBoolean("remenberNum", remenberNum);
                        mEdit.putBoolean("autoLogin", autoLogin);
                        //同樣是需要提交的
                        mEdit.commit();
                        //通過intent意圖,跳轉到指定登入成功的頁面
                        startActivity(new Intent(this, Other.class));
                    } else {
                        //使用者名稱或密碼不正確時,吐司提示登入失敗
                        Toast.makeText(getApplicationContext(), "登入失敗", Toast.LENGTH_SHORT).show();
                    }
                    break;
            }
        }

    }

    /**
     * function:對EditText輸入框非空判斷
     * @return
     */

    private boolean submit() {
        // validate
        String editText3String = editText3.getText().toString().trim();
        if (TextUtils.isEmpty(editText3String)) {
            Toast.makeText(this, "請輸入使用者名稱", Toast.LENGTH_SHORT).show();
            return false;
        }

        String editText4String = editText4.getText().toString().trim();
        if (TextUtils.isEmpty(editText4String)) {
            Toast.makeText(this, "請輸入密碼", Toast.LENGTH_SHORT).show();
            return false;
        }

        return true;

    }
}

Other.java
package com.zhiyuan3g.sharedpreferences;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class Other extends AppCompatActivity implements View.OnClickListener {

    private Button back_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        initView();
    }

    private void initView() {
        back_btn = (Button) findViewById(R.id.back_btn);

        back_btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.back_btn:
                SharedPreferences zhiyuan = getSharedPreferences("zhiyuan", MODE_PRIVATE);
                zhiyuan.edit().putBoolean("autoLogin", false).commit();
                startActivity(new Intent(this,AutoLogin.class));
                break;
        }
    }
}

activity_auto_login.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ABDAF5"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.zhiyuan3g.sharedpreferences.AutoLogin">

    <EditText
        android:layout_marginTop="120dp"
        android:singleLine="true"
        android:hint="請輸入使用者名稱"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editText3"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>

    <EditText
        android:singleLine="true"
        android:hint="請輸入密碼"
        android:inputType="textPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editText4"
        android:layout_below="@+id/editText3"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignRight="@+id/editText3"
        android:layout_alignEnd="@+id/editText3"/>

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="記住密碼"
        android:id="@+id/checkBox"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:checked="false"/>

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="自動登入"
        android:id="@+id/checkBox2"
        android:layout_alignTop="@+id/checkBox"
        android:layout_alignRight="@+id/editText4"
        android:layout_alignEnd="@+id/editText4"
        android:checked="false"/>

    <Button

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="註冊"
        android:id="@+id/button3"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="120dp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="登入"
        android:id="@+id/button4"
        android:layout_alignTop="@+id/button3"
        android:layout_alignRight="@+id/checkBox2"
        android:layout_alignEnd="@+id/checkBox2"/>

</RelativeLayout>

activity_other.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.zhiyuan3g.sharedpreferences.Other">
<TextView
    android:layout_width="wrap_content"
    android:gravity="center"
    android:textSize="50dp"
    android:text="登入成功"
    android:layout_height="wrap_content"/>
    <Button
        android:layout_marginTop="100dp"
        android:text="退出登入"
        android:id="@+id/back_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</RelativeLayout>