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

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"

android:stretchColumns="1" >

……

<TableRow>

<CheckBox android:id="@+id/remember_pass" android:layout_height="wrap_content" />

<TextView android:layout_height="wrap_content" android:text="Remember password" />

</TableRow>

<TableRow>

<Button android:id="@+id/login" android:layout_height="wrap_content" android:layout_span="2" android:text="Login" />

</TableRow>

</TableLayout>

这里使用到了一个新控件,CheckBox。这是一个复选框控件,用户可以通过点击的方 式来进行选中和取消,我们就使用这个控件来表示用户是否需要记住密码。

然后修改 LoginActivity 中的代码,如下所示:

public class LoginActivity extends BaseActivity {

private SharedPreferences pref;

private SharedPreferences.Editor editor;

private EditText accountEdit; private EditText passwordEdit; private Button login;

private CheckBox rememberPass;

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login);

pref = PreferenceManager.getDefaultSharedPreferences(this); accountEdit = (EditText) findViewById(R.id.account); passwordEdit = (EditText) findViewById(R.id.password); rememberPass = (CheckBox) findViewById(R.id.remember_pass); login = (Button) findViewById(R.id.login);

boolean isRemember = pref.getBoolean("remember_password", false);

if (isRemember) {

// 将账号和密码都设置到文本框中

String account = pref.getString("account", ""); String password = pref.getString("password", ""); accountEdit.setText(account); passwordEdit.setText(password);

rememberPass.setChecked(true);

}

login.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String account = accountEdit.getText().toString(); String password = passwordEdit.getText().toString();

if (account.equals("admin") && password.equals("123456")) {

editor = pref.edit();

if (rememberPass.isChecked()) { // 检查复选框是否被选中

editor.putBoolean("remember_password", true); editor.putString("account", account); editor.putString("password", password);

} else {

editor.clear();

}

editor.commit();

Intent intent = new Intent(LoginActivity.this, MainActivity.class);

startActivity(intent);

finish();

} else {

Toast.makeText(LoginActivity.this, "account or password is invalid", Toast.LENGTH_SHORT).show();

}

}

});

}

}

可以看到,这里首先在 onCreate()方法中获取到了 SharedPreferences 对象,然后调用它 的 getBoolean()方法去获取 remember_password 这个键对应的值,一开始当然不存在对应的 值了,所以会使用默认值 false,这样就什么都不会发生。接着在登录成功之后,会调用 CheckBox 的 isChecked()方法来检查复选框是否被选中,如果被选中了表示用户想要记住密 码,这时将 remember_password 设置为 true,然后把 account 和 password 对应的值都存入到 SharedPreferences 文件当中并提交。如果没有被选中,就简单地调用一下 clear()方法,将 SharedPreferences 文件中的数据全部清除掉。

当用户选中了记住密码复选框,并成功登录一次之后,remember_password 键对应的值 就是 true 了,这个时候如果再重新启动登录界面,就会从 SharedPreferences 文件中将保存的 账号和密码都读取出来,并填充到文本输入框中,然后把记住密码复选框选中,这样就完成 记住密码的功能了。

现在重新运行一下程序,可以看到界面上多出了一个记住密码复选框,如图 6.9 所示。

图   6.9

然后账号输入 admin,密码输入 123456,并选中记住密码复选框,点击登录,就会跳转 到 MainActivity。接着在 MainActivity 中发出一条强制下线广播会让程序重新回到登录界面, 此时你会发现,账号密码都已经自动填充到界面上了,如图 6.10 所示。

图   6.10

这样我们就使用 SharedPreferences 技术将记住密码功能成功实现了,你是不是对SharedPreferences 理解得更加深刻了呢? 不过需要注意,这里实现的记住密码功能仍然还只是个简单的示例,并不能在实际的项目中直接使用。因为将密码以明文的形式存储在 SharedPreferences 文件中是非常不安全的, 很容易就会被别人盗取,因此在正式的项目里还需要结合一定的加密算法来对密码进行保护才行。

android: SharedPreferences实现记住密码功能的更多相关文章

  1. 通过sharedpreferences实现记住密码功能

    通过sharedpreferences实现记住密码功能

  2. SharedPreferences实现记住密码功能

    SharedPerferences 简单介绍 用于保存简单的键值对数据: 它将数据放在 /data/data/<package name>/shared_prefs目录下,用xml文件保存 ...

  3. Android SharedPreferences登录记住密码

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单 数据类型(boolean.int.float.long和S ...

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

    在Android中登陆中,为了实现用户的方便,往往需要根据用户的需要进行记住密码的操作,所以,在Android数据存储中SharedPreferences恰恰可以实现这一点 下面,小编将带领大家通过S ...

  5. java实现记住密码功能(利用cookie)

    <br> <input type="text" id="userName" name="userName" value=& ...

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

    jquery.cookie.js操作cookie实现记住密码功能,很简单很强大,喜欢的朋友可以参考下.   复制代码代码如下: //初始化页面时验证是否记住了密码 $(document).ready( ...

  7. cookie记住密码功能

    很多门户网站都提供了记住密码功能,虽然现在的浏览器都已经提供了相应的记住密码功能 效果就是你每次进入登录页面后就不需要再进行用户名和密码的输入: 记住密码功能基本都是使用cookie来进行实现的,因此 ...

  8. 【原创】js中利用cookie实现记住密码功能

    在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...

  9. vue项目实现记住密码功能

     一.谷歌浏览的残留问题 现在很多的网站都有一个需求是记住密码这个功能,为的是避免用户下次登录的时候繁琐的输入过程. 像是一些主流的浏览器(比如Chrome)都有了这个功能,而且如果你登录了Chrom ...

随机推荐

  1. Nginx-->进阶-->Module-->ngx_http_stub_status_module

    一.模块介绍 The ngx_http_stub_status_module module provides access to basic status information. This modu ...

  2. Floyd | | jzoj[1218] | | [Usaco2009 Dec]Toll 过路费 | | BZOJ 1774 | | 我也不知道该怎么写

    写在前面:老师说这一道题是神题,事实上确实如此,主要是考察对Floyd的理解 ******************************题目.txt************************* ...

  3. MVC 路由模块内核原理

    .net网站第一次运行的时候 执行global文件的application_start方法 注册路由信息   RouteConfig.RegisterRoutes(RouteTable.Routes) ...

  4. 设置IE8 多个Table只产生一个进程

    //设置IE8 多个Table只产生一个进程 using Microsoft.Win32; RegistryKey key = Registry.LocalMachine; RegistryKey s ...

  5. Windows2003 II6.0 FTP 开了防火墙 FTP不能正常工作的解决办法

    .在防火墙设置的“高级-本地连接-设置”中把FTP的勾选

  6. Delphi初学者,向万一老师致敬

    今天首开博客园... 刚开始学习Delphi难免诸多不懂... 感谢万能的万一老师...

  7. 12.我们不是在真空里谈软件工程, 软件要运行在硬件芯片上面, 下面看看一个计算机芯片的发展历史: http://perspectives.mvdirona.com/2014/09/august-21-2014-computer-history-museum-presentation/ http://mvdirona.com/jrh/TalksAndPapers/DileepBhandar

    电脑芯片的诞生和发展是20世纪最伟大的发明之一,芯片技术决定了计算机升级换代的速度,决定了计算机小型化实现的程度,决定了计算机智能化的程度,决定了计算机普及化的应用深度. 1971年11月15日,英特 ...

  8. python基础整理笔记(四)

    一. python 打开文件的方法 1. python中使用open函数打开文件,需要设定的参数包括文件的路径和打开的模式.示例如下: f = open('a.txt', 'r+') 2. f为打开文 ...

  9. Programming Assignment 2: Randomized Queues and Deques

    实现一个泛型的双端队列和随机化队列,用数组和链表的方式实现基本数据结构,主要介绍了泛型和迭代器. Dequeue. 实现一个双端队列,它是栈和队列的升级版,支持首尾两端的插入和删除.Deque的API ...

  10. springmvc之interceptor(拦截器)

    1.自定义MyInterceptor impletments HandlerInterceptor public class MyInterceptor implements HandlerInter ...