既然是实现记住密码的功能,那么我们就不需要从头去写了,因为在上一章中的最佳实 践部分已经编写过一个登录界面了,有可以重用的代码为什么不用呢?那就首先打开 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. 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程

    [前提] 想要实现使用某种语言,比如Python,C#等,去实现模拟登陆网站的话,首先要做的事情就是使用某种工具,去分析本身使用浏览器去登陆网页的时候,其内部的执行过程,内部逻辑. 此登陆的逻辑过程, ...

  2. Awesome Machine Learning

    https://github.com/josephmisiti/awesome-machine-learning 包含了很多的machine-learning开源的资源,包括各种语言的machin l ...

  3. input 标签实现带提示文字的输入框

    方法一:html5配合css3实现带提示文字的输入框(摆脱js): webkit特有的一个css,可以控制里面的文字样式,配合css3的动画效果和伪类,我们就可以很容易做出一个带动画的输入框,在系统登 ...

  4. [转]MySQL中存储过程权限问题

    MySQL中以用户执行存储过程的权限为EXECUTE 比如我们在名为configdb的数据库下创建了如下存储过程,存储过程的定义者为user_admin use configdb; drop proc ...

  5. mysql Blob存取的一个简单例子

    一.得到mysql的连接 这里封装成一个方法,方便后面使用. public Connection getConnection() throws Exception{ String url = &quo ...

  6. javaweb-url /

    /一直搞得不清不楚 有时候不用加有时加了也行,有时必须加 转发自XXX论坛 推荐使用 <% String path = request.getContextPath(); String base ...

  7. day5----正则

    %a    本地(locale)简化星期名称     %A    本地完整星期名称     %b    本地简化月份名称     %B    本地完整月份名称     %c    本地相应的日期和时间 ...

  8. Spring的注入问题

    作下笔记,Spring的注入问题[多个实例问题] 解决方案如下: package student.life.support.platform.service.impl; import javax.an ...

  9. linux-5重要进程守护

    当给一台主机安装上linux系统后可以工作了-包括接受用户的输入/计算/存储/再将结果输出等等,这都是系统服务帮助我们完成的.而有一些系统服务时刻等待用户的输入(r如键盘进程)或随时响应用户的请求(如 ...

  10. line-height,vertical-align及图片居中对齐问题根源解析

    关于图片居中对齐的问题,进入前端行业虽然有一段时间了,以为自己懂了,可是实际上还是一知半解,找了一些博客来看了一下,但是感觉讲的有点碎,看完还是一知半解. 查阅了一下<css权威指南>,结 ...