zoukankan      html  css  js  c++  java
  • Android SharedPreferences登录记住密码

    SharedPreferences是Android中存储简单数据的一个工具类。可以想象它是一个小小的Cookie,它通过用键值对的方式把简单 数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/包名 /shared_prefs/)自己定义的xml文件中。

    重要方法

    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.重要方法

    lear():清除内容。

    commit():提交修改

    remove(String key):删除preference

    效果图

    代码

    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));
     
  • 相关阅读:
    vim中自动添加文件的作者、时间信息、版本等
    linux shell ipaddress
    java ant学习
    ganglia rpm安装
    深入分析 Java 中的中文编码问题
    javaIO调优
    超强的vim设置
    linux中core文件的生成和配置
    C和C++ 语言动态内存分配
    Linux的常用命令
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4535127.html
Copyright © 2011-2022 走看看