Android通過"記住密碼"功能學習資料存放區類SharedPreferences詳解及執行個體_Android

來源:互聯網
上載者:User

SharedPreferences是Android中儲存簡單資料的一個工具類。可以想象它是一個小小的Cookie,它通過用索引值對的方式把單一資料型別(boolean、int、float、long和String)儲存在應用程式的私人目錄下(data/data/包名/shared_prefs/)自己定義的xml檔案中。 

一、簡介

  它提供一種輕量級的資料存放區方式,通過eidt()方法來修改裡面的內容,通過Commit()方法來提交修改後的內容。 

二、重要方法

public abstract boolean contains (String key) :檢查是否已存在該檔案,其中key是xml的檔案名稱。

edit():為preferences建立一個編輯器Editor,通過建立的Editor可以修改preferences裡面的資料,但必須執行commit()方法。

getAll():返回preferences裡面的多有資料。

getBoolean(String key, boolean defValue):擷取Boolean型資料

getFloat(String key, float defValue):擷取Float型資料

getInt(String key, int defValue):擷取Int型資料

getLong(String key, long defValue):擷取Long型資料

getString(String key, String defValue):擷取String型資料

registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener):註冊一個當preference發生改變時被調用的回呼函數。

unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener):刪除當前回呼函數。

 三、重要介面SharedPreferences.Editor

1.簡介

  用於修改SharedPreferences對象的內容,所有更改都是在編輯器所做的批處理,而不是複製回原來的SharedPreferences或持久化儲存,直到你調用commit(),才將持久化儲存。

2.重要方法

  clear():清除內容。

  commit():提交修改

  remove(String key):刪除preference

下面通過“記住密碼”功能

四、執行個體

效果圖如下

首頁

 

登入成功後的頁面

 

當第一次登入點擊”記住密碼“後,第二次開啟時的頁面

2.代碼

布局檔案 login.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="right" android:layout_gravity="right" android:background="@drawable/default_bg" android:orientation="vertical"> <TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:stretchColumns="1"> <TableRow android:gravity="center" android:layout_gravity="center"> <ImageView android:layout_width="fill_parent"  android:layout_height="wrap_content" android:id="@+id/ivlogo" > </ImageView> </TableRow> </TableLayout> <TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:stretchColumns="1"> <TableRow android:layout_marginTop="100dip"> <TextView android:layout_width="wrap_content" android:layout_marginLeft="20dip" android:gravity="center_vertical" android:layout_height="wrap_content" android:id="@+id/tvaccount" android:text="帳號:" android:textSize="20sp"> </TextView> <EditText android:layout_width="70px" android:layout_height="wrap_content" android:id="@+id/etaccount" android:layout_marginRight="20dip" android:maxLength="20"></EditText> </TableRow> <TableRow android:layout_marginTop="10dip"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvpw" android:layout_marginLeft="20dip" android:gravity="center_vertical" android:text="密碼:" android:textSize="20sp"> </TextView> <EditText android:layout_width="70px" android:layout_height="wrap_content" android:layout_marginRight="20dip" android:id="@+id/etpw" android:inputType="textPassword"></EditText> </TableRow> </TableLayout><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="5dip" android:layout_marginRight="20dip">  <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvclear" android:text="清除Cookies" android:textColor="#aa0000" android:textSize="12px"></TextView>  </LinearLayout> <TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dip"> <TableRow android:gravity="center" android:layout_width="fill_parent"> <Button android:layout_width="100px" android:layout_height="wrap_content" android:id="@+id/btnlogin" android:layout_gravity="center" android:text="登入"></Button> <Button android:layout_width="100px" android:layout_height="wrap_content" android:id="@+id/btnexit" android:layout_gravity="center" android:text="退出"></Button> </TableRow> </TableLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="25dip"> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/cbrp" android:text="記住密碼" android:textSize="12px"></CheckBox> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/cbal" android:text="自動登入" android:textSize="12px"></CheckBox> </LinearLayout></LinearLayout>

java代碼

package com.wjq;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.os.Bundle;import android.util.Log;import android.view.Display;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.wjq.beans.User;import com.wjq.func.UserMgr;public class Login extends Activity { private EditText etAccount; private EditText etPW; private Button btnLogin; private Button btnExit; private CheckBox cbrp; private CheckBox cbal; private UserMgr userMgr; private User user; private SharedPreferences sp; private TextView tvClear; /* * (non-Javadoc) *  * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.login); etAccount = (EditText) findViewById(R.id.etaccount); etPW = (EditText) findViewById(R.id.etpw); cbrp = (CheckBox) findViewById(R.id.cbrp); cbal = (CheckBox) findViewById(R.id.cbal); btnLogin = (Button) findViewById(R.id.btnlogin); btnExit = (Button) findViewById(R.id.btnexit); tvClear=(TextView)findViewById(R.id.tvclear); InitConfig(); cbrp .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {  @Override  public void onCheckedChanged(CompoundButton buttonView,  boolean isChecked) {  sp = getSharedPreferences("UserInfo", 0);  sp.edit().putBoolean("cbrp", isChecked).commit();  } }); cbal .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {  @Override  public void onCheckedChanged(CompoundButton buttonView,  boolean isChecked) {  sp = getSharedPreferences("UserInfo", 0);  sp.edit().putBoolean("cbal", isChecked).commit();  } }); btnLogin.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { user = new User(etAccount.getText().toString(), etPW.getText()  .toString()); Log.i("tag", "Account:" + etAccount.getText().toString()); Log.i("tag", "Password:" + etPW.getText().toString()); userMgr = new UserMgr(); Boolean flag = userMgr.CheckUser(user, Login.this); if (!flag) {  Toast.makeText(Login.this, "使用者驗證錯誤!", 1000).show(); } else {  if (cbrp.isChecked()) {  sp = getSharedPreferences("UserInfo",  Context.MODE_WORLD_WRITEABLE   | Context.MODE_WORLD_READABLE);    sp.edit().putString("account",  etAccount.getText().toString()).commit();  sp.edit().putString("password",  etPW.getText().toString()).commit();  } } } }); btnExit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.exit(0); } });  tvClear.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) {sp=getSharedPreferences("UserInfo", 0);  sp.edit().clear().commit(); }}); } //初始化配置 private void InitConfig() { sp = getSharedPreferences("UserInfo", 0); etAccount.setText(sp.getString("account", null)); etPW.setText(sp.getString("password", null)); cbal.setChecked(sp.getBoolean("cbal", false)); cbrp.setChecked(sp.getBoolean("cbrp", false)); }}

說明:

1.寫內容

 sp = getSharedPreferences("UserInfo", 0);  sp.edit().putBoolean("cbal", isChecked).commit();  UserInfo是指xml檔案的檔案名稱,如果此檔案已存在則直接向其中寫內容“isChecked”的值,首先通過SharedPreferences的edit()方法建立editor,然後調用commit()方法提修改

2.讀內容

sp = getSharedPreferences("UserInfo", 0); etAccount.setText(sp.getString("account", null)); etPW.setText(sp.getString("password", null)); cbal.setChecked(sp.getBoolean("cbal", false)); cbrp.setChecked(sp.getBoolean("cbrp", false));

以上就是本文的全部內容,希望對大家的學習有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.