zoukankan      html  css  js  c++  java
  • Android简单数据存储类SharedPreferences详解及实例(通过“记住密码”功能学习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

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

    四、实例

      效果图如下

    首页

    登录成功后的页面

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

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

  • 相关阅读:
    ABP实现文件下载
    sqlserver把查询结果转为json和xml
    使用docker安装nginx
    sqlserver 索引优化 sql语句执行分析
    centos7下安装docker教程
    mysql查看sql的执行计划(是否使用索引等)
    vue计算属性和watch的区别有哪些?
    多表连接的三种方式详解 hash join、merge join、 nested loop
    【Winform】所有的dll都打包到一个exe里
    【异常处理】System.Data.Entity.Core.EntityException: 'The underlying provider failed on Open.'
  • 原文地址:https://www.cnblogs.com/salam/p/1857724.html
Copyright © 2011-2022 走看看