SharedPreferences实现记住密码功能

aredPerferences 简单介绍

  • 用于保存简单的键值对数据;
  • 它将数据放在 /data/data/<package name>/shared_prefs目录下,用xml文件保存MAP键值对;

SharedPerferences 使用步骤

将数据存储到SharedPerferences中:

  1.先要得到SharedPerference对象:(三种方法)

      1).使用Context类中的 getSharedPreferences() 方法,它接收两个参数,第一个参数为文件名称,第二个参数为操作模式。

       操作模式MODE_PRAVITE :只有当前程序才能对这个文件进行读写。MODE_MULTI_PROCESS :多个进程中对同一个文件进行读写。

       如:

SharedPreferences spf = getSharedPreferences("data",Context.MODE_PRIVATE);

      2).使用Activity类中的 getPreferences() 方法,它只接收一个参数--操作模式,并且会将当前活动的类名作为文件名。

       如:

SharedPreferences spf = getPreferences(MODE_PRIVATE);

      3).使用PreferenceManager类中的 getDefaultSharedPreferences() 方法,它接收一个Context参数,并且用包名作为前缀来命名文件。

       如:

SharedPreferences spf = PreferenceManager.getDefaultSharedPreferences(this);

  2.再得到SharedPreferences.Editor对象:

      使用SharedPreferences对象的 edit() 方法。

SharedPreference.Editor editor = spf.edit();

  3.开始添加数据:

      以键值对的方式写入数据。

editor.putInt("age",22);
editor.putString("name","Visen");
editor.putBoolean("singleDog",false)

  4.提交操作:

editor.commit();

从SharedPerferences中读取数据:

  

简单的保存密码功能

login.xml 登录布局页面

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black"
    android:stretchColumns="1">

    <LinearLayout
        android:layout_height="wrap_content"
        android:background="@color/black"
        android:orientation="vertical">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="240dp"
            android:src="@drawable/image1"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/title"
            android:textSize="40sp"
            android:textColor="@color/red"
            android:gravity="center"
            android:background="@color/cyan"/>
    </LinearLayout>

   <TableRow
       android:layout_marginTop="30dp">
       <TextView
           android:layout_height="wrap_content"
           android:text="@string/account"
           android:textSize="30sp"
           android:textColor="@color/white"/>
       <EditText
           android:id="@+id/account"
           android:layout_height="wrap_content"
           android:inputType="text"
           android:textSize="20sp"
           android:textColor="@color/red"
           android:gravity="center"
           android:singleLine="true"/>
   </TableRow>

    <TableRow>
        <TextView
            android:layout_height="wrap_content"
            android:text="@string/password"
            android:textSize="30sp"
            android:textColor="@color/white"/>
        <EditText
            android:id="@+id/passWord"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:textSize="20sp"
            android:textColor="@color/red"
            android:gravity="center" />
    </TableRow>

    <TableLayout
        android:layout_height="wrap_content"
        android:stretchColumns="0">

        <TableRow>
            <CheckBox
                android:id="@+id/saveSelect"
                android:background="@color/red"
                android:layout_gravity="end"/>
            <TextView
                android:layout_height="wrap_content"
                android:text="@string/saveSelect"
                android:textSize="20sp"
                android:textColor="@color/white"
                android:gravity="center"
                android:layout_gravity="bottom"/>
        </TableRow>

        <TableRow>
            <Button
                android:layout_height="wrap_content"
                android:id="@+id/login"
                android:gravity="center"
                android:layout_span="2"
                android:text="@string/login"
                android:textSize="25sp"
                android:textColor="@color/red"
                android:background="@drawable/black_bt"/>
        </TableRow>
    </TableLayout>
</TableLayout>

Login.java

public class Login extends AppCompatActivity {

    private SharedPreferences spf;
    private SharedPreferences.Editor spfe;

    private int num = 0;
    private EditText account = null;
    private EditText passWord = null;
    private CheckBox saveSelect = null;
    private Button login = null ;

    @Override
    protected void onCreate(Bundle saveInstanceState){

        //加载布局
        super.onCreate(saveInstanceState);
        setContentView(R.layout.login);

        //初始化控件
        account = (EditText)findViewById(R.id.account);
        passWord = (EditText)findViewById(R.id.passWord);
        saveSelect = (CheckBox)findViewById(R.id.saveSelect);
        login = (Button)findViewById(R.id.login);

        //使用Context的getSharedPreferences(String name,int mode)方法得到SharedPreferences对象;
        spf = getSharedPreferences("data", Context.MODE_PRIVATE);
        //使用SharedPreferences对象的edit()方法得到 SharedPreferences.Editor 的对象;
        spfe = spf.edit();

        //复选框是否被选中,若为选中状态,则保存过账户,要恢复数据
        if(spf.getBoolean("isSelect",false)){//选中标志,默认值为false
            String acc = spf.getString("account","");
            String pas = spf.getString("passWord","");
            account.setText(acc);
            passWord.setText(pas);
            saveSelect.setChecked(true);
        }

        //设置登录按钮监听事件
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //确认帐号密码
                if(account.getText().toString().equals("visen") && passWord.getText().toString().equals("dsy402645063!")){

                    //复选框是否被勾选,若被勾选,则需要保存账户后登录;否则直接登录且不保存账户
                    if(saveSelect.isChecked()){
                        saveDate();
                    }else {
                        spfe.clear();
                        spfe.commit();
                    }

                    //页面跳转
                    Intent intent = new Intent(Login.this,MainActivity.class);
                    startActivity(intent);
                    finish();
                }else {//账户或密码错误
                    Toast.makeText(Login.this, "account or password is invalid", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

    public void saveDate(){

        //读取EditText中的内容
        String acc = account.getText().toString();
        String pas = passWord.getText().toString();
        //保存数据
        spfe.putString("account",acc);
        spfe.putString("passWord",pas);
        spfe.putBoolean("isSelect",true);
        //提交
        spfe.commit();
    }

    @Override
    public void onBackPressed(){
        num++;
        if(num == 2){
            super.onBackPressed();
        }else{
            Toast.makeText(Login.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
        }
    }
}

这其中提供了一系列的get方法进行数据的读取。如:

String name = editor.getString("name"," ");

  如果键所对应的值不存在,则填入设定的默认值。

时间: 2024-08-04 22:05:11

SharedPreferences实现记住密码功能的相关文章

android: SharedPreferences实现记住密码功能

既然是实现记住密码的功能,那么我们就不需要从头去写了,因为在上一章中的最佳实 践部分已经编写过一个登录界面了,有可以重用的代码为什么不用呢?那就首先打开 BroadcastBestPractice 项目,来编辑一下登录界面的布局.修改 login.xml 中的代码,如下 所示: <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="mat

Android &#39;记住密码&#39;功能

1.运行后界面图 2.主要代码: 2.1 activity_main.xml(2个TextView 2个EditText 1个CheckBox以及1个Button): 1 <TextView 2 android:id="@+id/tvAccount" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:layout_al

Android Minitwitter 记住密码功能

MiniTwitter记住密码功能实现      首先,在进入本次主要内容之前说一下,本功能的实现是在twitter登陆界面的基础上操作,但本次主要任务内容是记住密码的功能实现,所以登陆界面不在详细介绍. 如图:为本次实验的结果图: 1.界面介绍 布局构造:布局分为三大部分 (1)背景:使用LinearLayout布局: (2)浅蓝色部分:使用RelativeLayout布局: 注意:这里用到圆角设置corners和填充色设置solid: (3)输入框和按钮:使用TextView.EditTex

阻止浏览器记住密码功能

一.关于浏览器记住密码功能 可以参考:http://www.cnblogs.com/tianma3798/p/6062869.html 二.如何控制浏览器不提示"是否记住密码"呢 解决方案1: 1.关闭表单的自动完成功能 autocomplete=false,关于参考:autocomplete属性 2.延迟设置密码域,即在页面加载成功后 将输入框的type='password' 代码示例: <div class="container"> <form

js中利用cookie实现记住密码功能

js中利用cookie实现记住密码功能 在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: 1 HttpServletRequest request 2 HttpServletResponse response 3 Cookie username = new Cookie("username ","cookievalue"); 4 Cookie password = new Cookie("password

Android数据存储-通过SharedPreferences实现记住密码的操作

在Android中登陆中,为了实现用户的方便,往往需要根据用户的需要进行记住密码的操作,所以,在Android数据存储中SharedPreferences恰恰可以实现这一点 下面,小编将带领大家通过SharedPreferences实现记住密码的操作 一.首先:介绍下什么是SharedPreferences? SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置. 二.介绍了SharedPreferences,我们将通过记住SharedPrefe

为了用户信息安全,屏蔽浏览器的记住密码功能

现在绝大多数浏览器,都有一个很方便的记住密码功能,不过在公共场所,这样对用户的信息很不安全.  所以为了屏蔽浏览器的记住密码,各路高手百家争鸣,提出很多好办法. 要是浏览器给开发者,提供一个清空浏览器缓存信息的api就好了. 现在直接上方法,语法有什么不通畅的地方请见谅--囧 1.给表单输入控件加上autocomplete='off' 在某些浏览器中(比如chrome),并不能阻止记住密码功能:在IE中有效. 2.在密码框的前面加一个<input type='hidden'> 经过试验,<

记住密码功能 JS结合JQuery 操作 Cookie 实现记住密码和用户名!

// 记住密码功能 JS结合JQuery 操作 Cookie 实现记住密码和用户名! var username = document.getElementById("username"); var password = document.getElementById("password"); var date=new Date(); var expiresDays=1000; //过期时间. date.setTime(date.getTime()+expiresDa

jquery.cookie.js 操作cookie实现记住密码功能的实现代码

jquery.cookie.js操作cookie实现记住密码功能,很简单很强大,喜欢的朋友可以参考下. 复制代码代码如下: //初始化页面时验证是否记住了密码 $(document).ready(function() { if ($.cookie("rmbUser") == "true") { $("#rmbUser").attr("checked", true); $("#user").val($.coo