zoukankan      html  css  js  c++  java
  • 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));

  • 相关阅读:
    python中os.listdir( )函数读取文件夹
    斐讯k2p 月光银 硬件版本A2-软件版本22.7.8.5 刷官改系统
    Ubuntu 16.04 换国内源
    pip和apt-get换源
    Python-OpenCV中的filter2D()函数
    Python-OpenCV中图像合并显示
    Python-OpenCV——Image Blurring(Image Smoothing)
    Python-OpenCV中的resize()函数
    删除Chrome地址栏记录中自动补全的网址
    Python中Numpy mat的使用
  • 原文地址:https://www.cnblogs.com/622698abc/p/2722642.html
Copyright © 2011-2022 走看看