Android简单数据存储类SharedPreferences详解及实例

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

  下面通过“记住密码”功能

  四、实例

  效果图如下

(图)Android简单数据存储类SharedPreferences详解及实例Android简单数据存储类SharedPreferences详解及实例


 

 首页

(图)Android简单数据存储类SharedPreferences详解及实例Android简单数据存储类SharedPreferences详解及实例

登录成功后的页面

(图)Android简单数据存储类SharedPreferences详解及实例Android简单数据存储类SharedPreferences详解及实例


  

当第一次登录点击”记住密码“后,第二次打开时的页面

  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));

原文地址:https://www.cnblogs.com/622698abc/p/2722642.html