使用者登入之SharedPreferences儲存使用者名稱
阿新 • • 發佈:2019-01-22
Android系統中主要提供了三種方式用於簡單地實現資料持久化功能,即:
1.檔案儲存
2.SharedPreference儲存(首選項儲存) // 使用者可以按照自己的喜好來更改介面風格,操作習慣,常用列表等資料資訊,通常把這些資訊叫做首選項資訊,這些資訊基本都是以鍵值對(key-value)的形式來儲存的。
3.資料庫儲存
對於使用者名稱這種超輕量級資料,SharedPreference儲存再適合不過。
至於SharedPreference的用法這裡不過多介紹,來看看他在例項應用的用法吧。
①建立xml檔案進行介面佈局(這裡只是簡單地demo,佈局很隨意~~)
activity_loading.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="使用者名稱:" android:id="@+id/textView" android:layout_alignBottom="@+id/editUserName" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editUserName" android:layout_gravity="right" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/textView2" android:layout_toEndOf="@+id/textView2" android:layout_marginTop="42dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="密 碼:" android:id="@+id/textView2" android:layout_marginTop="71dp" android:layout_below="@+id/textView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:ems="10" android:id="@+id/editUserPassword" android:layout_gravity="center_horizontal" android:layout_alignTop="@+id/textView2" android:layout_toRightOf="@+id/textView2" android:layout_toEndOf="@+id/textView2" /> <Button android:onClick="doClick" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登入" android:id="@+id/btnLogin" android:layout_alignTop="@+id/btnRegister" android:layout_alignLeft="@+id/checkBox" android:layout_alignStart="@+id/checkBox" /> <Button android:onClick="doClick" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="註冊" android:id="@+id/btnRegister" android:layout_marginRight="53dp" android:layout_marginEnd="53dp" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="記住使用者名稱" android:id="@+id/checkBox" android:checked="false" android:layout_above="@+id/btnLogin" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout>
②Main_Activity.java實現記住賬號這個功能
package com.example.loading;
import android.content.SharedPreferences; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { EditText editUserName,editUserPassword; Button btnLogin,btnRegister; SharedPreferences pref; SharedPreferences.Editor editor; CheckBox checkBox; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_loading); //預設 // SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); //自定義 // SharedPreferences pref = getSharedPreferences("myPref",MODE_PRIVATE); // //得到編輯器物件 // SharedPreferences.Editor editor = pref.edit(); // editor.putString("name","張三"); // editor.commit(); editUserName = (EditText) findViewById(R.id.editUserName); editUserPassword = (EditText) findViewById(R.id.editUserPassword); btnLogin = (Button) findViewById(R.id.btnLogin); btnRegister = (Button) findViewById(R.id.btnRegister); checkBox = (CheckBox) findViewById(R.id.checkBox); //例項化SharedPreferences物件 指定MODE_PRIVATE模式還有MODE_WORLD_READABLE MODE_WORLD_WRITEABLE模式 pref = getSharedPreferences("UserInfo",MODE_PRIVATE); //啟用edit()獲取例項 editor = pref.edit(); //第一個引數為取到的使用者名稱名字,第二個引數為第一個引數的預設值 String name = pref.getString("editUserName",null); //如果取到的name為空(第一次啟動程式或者沒有點記住使用者名稱)單選框false狀態,使用者名稱的文字框為空 // 否則true並將取到的name寫入使用者名稱的文字框 if (name == null){ checkBox.setChecked(false); } else { checkBox.setChecked(true); //把值放進去 editUserName.setText(name); } } // 兩個按鈕的點選事件 public void doClick(View view){ switch (view.getId()){ //如果點選了登入按鈕 case R.id.btnLogin: //取出使用者名稱和密碼,trim()是去掉前後的空格 String userName = editUserName.getText().toString().trim(); String userPassword= editUserPassword.getText().toString().trim(); // Log.i("test",userName); // Log.i("test",userPassword); if("admin".equals(userName) && "123456".equals(userPassword)){ //如果單選框被選中,則將取到的使用者名稱存到editUserName(使用者名稱文字框) // 否則移除文字框的內容 if (checkBox.isChecked()){ editor.putString("editUserName",userName);//這是一個鍵值對 //注意提交 editor.commit(); }else{ editor.remove("editUserName"); //注意提交 editor.commit(); } Toast.makeText(MainActivity.this,"登入成功",Toast.LENGTH_LONG).show(); }else{ Toast.makeText(MainActivity.this,"賬號/密碼錯誤,登入失敗",Toast.LENGTH_LONG).show(); } break; default: break; } } }
單機登入之後就可以將key和value的值儲存在首選項的資訊資料檔案中,這個檔案的目錄是“/data/data/<package_name>/share_prefs”下可以下載下來看看看內容。