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