android: SharedPreferences实现记住密码功能

既然是实现记住密码的功能,那么我们就不需要从头去写了,因为在上一章中的最佳实 践部分已经编写过一个登录界面了,有可以重用的代码为什么不用呢?那就首先打开 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 文件中是非常不安全的,
很容易就会被别人盗取,因此在正式的项目里还需要结合一定的加密算法来对密码进行保护
才行。

时间: 2024-11-12 17:37:15

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

SharedPreferences实现记住密码功能

aredPerferences 简单介绍 用于保存简单的键值对数据: 它将数据放在 /data/data/<package name>/shared_prefs目录下,用xml文件保存MAP键值对: SharedPerferences 使用步骤 将数据存储到SharedPerferences中: 1.先要得到SharedPerference对象:(三种方法) 1).使用Context类中的 getSharedPreferences() 方法,它接收两个参数,第一个参数为文件名称,第二个参数为操

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

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

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

阻止浏览器记住密码功能

一.关于浏览器记住密码功能 可以参考: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

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

现在绝大多数浏览器,都有一个很方便的记住密码功能,不过在公共场所,这样对用户的信息很不安全.  所以为了屏蔽浏览器的记住密码,各路高手百家争鸣,提出很多好办法. 要是浏览器给开发者,提供一个清空浏览器缓存信息的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