1. 程式人生 > >Android使用SharedPreferences實現登入帳號和密碼的儲存方法簡介

Android使用SharedPreferences實現登入帳號和密碼的儲存方法簡介

先來看看程式執行圖:

1.使用者未輸入狀態:


2.使用者單擊記住密碼:


3.使用者單擊讀取密碼:


接下來我們來看實現程式碼:

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    //宣告SharedPreferences物件。
    SharedPreferences sharedPreferences;
    //宣告Editor物件。
    SharedPreferences.Editor editor;

    private Button remberButton;
    private Button readButton;
    private EditText studentNumber;
    private EditText passWord;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        remberButton=(Button)findViewById(R.id.remberButton);
        readButton=(Button)findViewById(R.id.readButton);
        studentNumber=(EditText)findViewById(R.id.studentNumber);
        passWord=(EditText)findViewById(R.id.passWord);
        //SharedPreferences本身是一個介面,程式無法直接建立例項因此只能通過Context提供的getSharedPreferences方法來獲取SharedPreferences例項。
        /*該方法的第二個引數有三個值分別為:
        * 1.Context.MODE_PRIVATE:指定該SharedPreferences資料只能被本程式訪問。
        * 2.Context.MODE_WORLD_READABLE:指定資料可被其他應用讀取但不能寫入。
        * 3.Context.MODE_WORLD_WRITEABLE:指定資料可以被其他應用讀寫。
        * 注意:
        * 從Android 4.2開始Android官方並不再推薦使用Context.MODE_WORLD_READABLE,Context.MODE_WORLD_WRITEABLE
        * 這兩種方式因為這兩種方式允許外來應用訪問他人的軟體會造成安全漏洞。
        *
        *
        * */
        sharedPreferences=getSharedPreferences("studentList", Context.MODE_PRIVATE);
        editor=sharedPreferences.edit();
        readButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //使用sharedPreferences.getString()的方法來訪問儲存的資料。
                String studentNumber=sharedPreferences.getString("studentNumber",null);
                String passWord=sharedPreferences.getString("passWord",null);
                if(studentNumber==null)
                {
                    Toast.makeText(MainActivity.this,"當前沒有學生記錄請新增!",Toast.LENGTH_LONG).show();
                }else
                {
                    Toast.makeText(MainActivity.this,"學號:"+studentNumber+"\n"+"密碼:"+passWord,Toast.LENGTH_LONG).show();
                }
            }
        });
        remberButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //寫入資料使用editor.putXxx()這裡可以指定寫入的資料型別。
                editor.putString("studentNumber",studentNumber.getText().toString());
                editor.putString("passWord",passWord.getText().toString());
                //提交資料。
                editor.commit();
                Toast.makeText(MainActivity.this,"成功記錄密碼!!!",Toast.LENGTH_SHORT).show();
            }
        });

    }

}

下面是佈局程式碼:
<?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.example.zhangyi.sharedpreferences_test.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="學號:"
        android:id="@+id/textView"
        android:textSize="25sp"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="100dp" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/studentNumber"
        android:hint="請輸入學號..."
        android:layout_alignBottom="@+id/textView"
        android:layout_toEndOf="@+id/textView" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密碼:"
        android:textSize="25sp"
        android:id="@+id/textView2"
        android:layout_below="@+id/textView"
        android:layout_alignParentStart="true"
        android:layout_marginTop="45dp" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:hint="請輸入密碼..."
        android:id="@+id/passWord"
        android:layout_alignBottom="@+id/textView2"
        android:layout_toEndOf="@+id/textView2" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="記住密碼"
        android:id="@+id/remberButton"
        android:layout_below="@+id/passWord"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="109dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="讀取密碼"
        android:id="@+id/readButton"
        android:layout_below="@+id/remberButton"
        android:layout_alignStart="@+id/remberButton"
        android:layout_marginTop="39dp" />
</RelativeLayout>