Android使用SharedPreferences保存账号密码
2017-08-16 18:33
543 查看
有很多的应用都会有保存密码和账号的功能,比如QQ。接下来就讲讲使用SharedPreferences来保存密码和账号,也许有些人会考虑的数据库,但是我个人认为对于保存简单的数据,使用的数据库就大材小用了,SharedPreferences比较轻量级
首先写好布局,只有两个输入框和一个按钮
<EditText
android:id="@+id/number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number" />
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />
<Button
android:id="@+id/save"
android:text="保存"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
获取取控件 private EditText number;
private EditText password;
private Button save;
number = (EditText) findViewById(R.id.number);
password = (EditText) findViewById(R.id.password);
save = (Button) findViewById(R.id.save);
在获取控件之后,还要获取SharedPreferences,第一参数为保存的文件名,第二个为保存的模型,当文件存在就读取,如果不存在就创建private SharedPreferences sp;
//第一参数为保存的文件名,第二个为保存的模型,当文件存在就读取,如果不存在就创建
sp = getSharedPreferences("info",MODE_PRIVATE);
增加按钮点击事件,点击按钮保存账号和密码save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取输入框的账号和密码
String numberStr = number.getText().toString().trim();
String passwordStr = password.getText().toString().trim();
//判断是否为空
if (numberStr.isEmpty() || passwordStr.isEmpty()){
Toast.makeText(getApplicationContext(),"账号或密码不能为空",Toast.LENGTH_SHORT).show();
}else {
//获取Editor
SharedPreferences.Editor editor = sp.edit();
//输入内容
editor.putString("number",numberStr);
editor.putString("password",passwordStr);
//必须提交才会生效,也可以使用apply
editor.commit();
Toast.makeText(getApplicationContext(),"保存成功",Toast.LENGTH_SHORT).show();
}
}
});
当我们保存账号和密码后,想要在第二次打开应用时直接写密码和账号,还有在加载页面时获取数据//获取info文件的内容,第一参数为保存时的key,第二个是如果获取不到的默认值
String numberStr1 = sp.getString("number","");
String passwordStr2 = sp.getString("password","");
number.setText(numberStr1);
password.setText(passwordStr2);
效果图
这个info.xml的文件保存在data/data/包名/shared_prefs/info.xml,可以看到是以XML格式保存的
最后再来理一理整个思路
保存
①通过getSharedPreferences("文件名",模式)获得SharedPreferences
②通过sp.edit()获取Editor
③使用editor调用putXXX(key,value)保存数据
④使用editor调用apply()或者commit()才会生效
读取
①通过getSharedPreferences("文件名",模式)获得SharedPreferences
②通过sp.getXXX(key,defValue)直接可以获得数据
加密
明文保存好像很不安全,那我们就对密码简单加密,下面是加密和解密的方法 /**
* 加密方法
* @param str 要加密的字符串
* @param key 加密的密匙
* @return 返回加密后的字符串
*/
public String encryptionString(String str, int key) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] + key);
}
return String.valueOf(chars);
}
/**
* 解密方法
* @param str 要解密的字符串
* @param key 解密的密匙,跟加密一样
* @return 返回解密后的字符串
*/
public String decodeString(String str, int key) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] - key);
}
return String.valueOf(chars);
}
在保存密码前要对密码加密public static final int DECODE_ENCRYPTION_KEY = 64;
String passwordStr = password.getText().toString().trim();
//对密码进行加密
passwordStr = encryptionString(passwordStr, DECODE_ENCRYPTION_KEY);
editor.putString("password", passwordStr);
显示密码前要对密码解密public static final int DECODE_ENCRYPTION_KEY = 64;
String passwordStr2 = sp.getString("password", "");
//对密码进行解密
passwordStr2 = decodeString(passwordStr2,DECODE_ENCRYPTION_KEY);
password.setText(passwordStr2);
在保存后,就算别人看到也不知道真实的密码是什么,下面的图是加密后的,真实密码是654321
整个代码如下:import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText number;
private EditText password;
private Button save;
private SharedPreferences sp;
public static final int DECODE_ENCRYPTION_KEY = 64;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
number = (EditText) findViewById(R.id.number);
password = (EditText) findViewById(R.id.password);
save = (Button) findViewById(R.id.save);
//第一参数为保存的文件名,第二个为保存的模型,当文件存在就读取,如果不存在就创建
sp = getSharedPreferences("info", MODE_PRIVATE);
//获取info文件的内容,第一参数为保存时的key,第二个是如果获取不到的默认值
String numberStr1 = sp.getString("number", "");
String passwordStr2 = sp.getString("password", "");
//对密码进行解密
passwordStr2 = decodeString(passwordStr2,DECODE_ENCRYPTION_KEY);
password.setText(passwordStr2);
number.setText(numberStr1);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取输入框的账号和密码
String numberStr = number.getText().toString().trim();
String passwordStr = password.getText().toString().trim();
//对密码进行加密
passwordStr = encryptionString(passwordStr, DECODE_ENCRYPTION_KEY);
//判断是否为空
if (numberStr.isEmpty() || passwordStr.isEmpty()) {
Toast.makeText(getApplicationContext(), "账号或密码不能为空", Toast.LENGTH_SHORT).show();
} else {
//获取Editor
SharedPreferences.Editor editor = sp.edit();
//输入内容
editor.putString("number", numberStr);
editor.putString("password", passwordStr);
//必须提交才会生效,也可以使用apply
editor.commit();
Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT).show();
}
}
});
}
/**
* 加密方法
* @param str 要加密的字符串
* @param key 加密的密匙
* @return 返回加密后的字符串
*/
public String encryptionString(String str, int key) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] + key);
}
return String.valueOf(chars);
}
/**
* 解密方法
* @param str 要解密的字符串
* @param key 解密的密匙,跟加密一样
* @return 返回解密后的字符串
*/
public String decodeString(String str, int key) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] - key);
}
return String.valueOf(chars);
}
}
项目源代码:http://download.csdn.net/download/qq_33200967/9929339
首先写好布局,只有两个输入框和一个按钮
<EditText
android:id="@+id/number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number" />
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword" />
<Button
android:id="@+id/save"
android:text="保存"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
获取取控件 private EditText number;
private EditText password;
private Button save;
number = (EditText) findViewById(R.id.number);
password = (EditText) findViewById(R.id.password);
save = (Button) findViewById(R.id.save);
在获取控件之后,还要获取SharedPreferences,第一参数为保存的文件名,第二个为保存的模型,当文件存在就读取,如果不存在就创建private SharedPreferences sp;
//第一参数为保存的文件名,第二个为保存的模型,当文件存在就读取,如果不存在就创建
sp = getSharedPreferences("info",MODE_PRIVATE);
增加按钮点击事件,点击按钮保存账号和密码save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取输入框的账号和密码
String numberStr = number.getText().toString().trim();
String passwordStr = password.getText().toString().trim();
//判断是否为空
if (numberStr.isEmpty() || passwordStr.isEmpty()){
Toast.makeText(getApplicationContext(),"账号或密码不能为空",Toast.LENGTH_SHORT).show();
}else {
//获取Editor
SharedPreferences.Editor editor = sp.edit();
//输入内容
editor.putString("number",numberStr);
editor.putString("password",passwordStr);
//必须提交才会生效,也可以使用apply
editor.commit();
Toast.makeText(getApplicationContext(),"保存成功",Toast.LENGTH_SHORT).show();
}
}
});
当我们保存账号和密码后,想要在第二次打开应用时直接写密码和账号,还有在加载页面时获取数据//获取info文件的内容,第一参数为保存时的key,第二个是如果获取不到的默认值
String numberStr1 = sp.getString("number","");
String passwordStr2 = sp.getString("password","");
number.setText(numberStr1);
password.setText(passwordStr2);
效果图
这个info.xml的文件保存在data/data/包名/shared_prefs/info.xml,可以看到是以XML格式保存的
最后再来理一理整个思路
保存
①通过getSharedPreferences("文件名",模式)获得SharedPreferences
②通过sp.edit()获取Editor
③使用editor调用putXXX(key,value)保存数据
④使用editor调用apply()或者commit()才会生效
读取
①通过getSharedPreferences("文件名",模式)获得SharedPreferences
②通过sp.getXXX(key,defValue)直接可以获得数据
加密
明文保存好像很不安全,那我们就对密码简单加密,下面是加密和解密的方法 /**
* 加密方法
* @param str 要加密的字符串
* @param key 加密的密匙
* @return 返回加密后的字符串
*/
public String encryptionString(String str, int key) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] + key);
}
return String.valueOf(chars);
}
/**
* 解密方法
* @param str 要解密的字符串
* @param key 解密的密匙,跟加密一样
* @return 返回解密后的字符串
*/
public String decodeString(String str, int key) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] - key);
}
return String.valueOf(chars);
}
在保存密码前要对密码加密public static final int DECODE_ENCRYPTION_KEY = 64;
String passwordStr = password.getText().toString().trim();
//对密码进行加密
passwordStr = encryptionString(passwordStr, DECODE_ENCRYPTION_KEY);
editor.putString("password", passwordStr);
显示密码前要对密码解密public static final int DECODE_ENCRYPTION_KEY = 64;
String passwordStr2 = sp.getString("password", "");
//对密码进行解密
passwordStr2 = decodeString(passwordStr2,DECODE_ENCRYPTION_KEY);
password.setText(passwordStr2);
在保存后,就算别人看到也不知道真实的密码是什么,下面的图是加密后的,真实密码是654321
整个代码如下:import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText number;
private EditText password;
private Button save;
private SharedPreferences sp;
public static final int DECODE_ENCRYPTION_KEY = 64;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
number = (EditText) findViewById(R.id.number);
password = (EditText) findViewById(R.id.password);
save = (Button) findViewById(R.id.save);
//第一参数为保存的文件名,第二个为保存的模型,当文件存在就读取,如果不存在就创建
sp = getSharedPreferences("info", MODE_PRIVATE);
//获取info文件的内容,第一参数为保存时的key,第二个是如果获取不到的默认值
String numberStr1 = sp.getString("number", "");
String passwordStr2 = sp.getString("password", "");
//对密码进行解密
passwordStr2 = decodeString(passwordStr2,DECODE_ENCRYPTION_KEY);
password.setText(passwordStr2);
number.setText(numberStr1);
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取输入框的账号和密码
String numberStr = number.getText().toString().trim();
String passwordStr = password.getText().toString().trim();
//对密码进行加密
passwordStr = encryptionString(passwordStr, DECODE_ENCRYPTION_KEY);
//判断是否为空
if (numberStr.isEmpty() || passwordStr.isEmpty()) {
Toast.makeText(getApplicationContext(), "账号或密码不能为空", Toast.LENGTH_SHORT).show();
} else {
//获取Editor
SharedPreferences.Editor editor = sp.edit();
//输入内容
editor.putString("number", numberStr);
editor.putString("password", passwordStr);
//必须提交才会生效,也可以使用apply
editor.commit();
Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT).show();
}
}
});
}
/**
* 加密方法
* @param str 要加密的字符串
* @param key 加密的密匙
* @return 返回加密后的字符串
*/
public String encryptionString(String str, int key) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] + key);
}
return String.valueOf(chars);
}
/**
* 解密方法
* @param str 要解密的字符串
* @param key 解密的密匙,跟加密一样
* @return 返回解密后的字符串
*/
public String decodeString(String str, int key) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] - key);
}
return String.valueOf(chars);
}
}
项目源代码:http://download.csdn.net/download/qq_33200967/9929339
相关文章推荐
- Android 使用SharedPreferences对象保存账号密码
- Android中使用sharedPreferences对登陆页面中的账号密码进行保存
- Android 使用SharedPreferences 进行保存账号or密码or其它数据
- 在ios开发中,使用钥匙来保存用户密码和账号
- android--内部存储写文件和使用API获取内部存储路径,sharedperferance获取原有的账号密码--简单的登陆(记录原有的账号和密码)--I/0流介绍
- android开发学习之 简单的demo SharedPreferences 的登陆账号密码保存和按键退出提醒
- android登陆界面保存账号密码附带源码
- Android模拟QQ登陆保存账号密码,初始化读取账号密码
- android SharedPreferences实现用户的注册和保存账号密码
- Android中使用SharedPreferences完成记住账号密码的功能
- Android:使用密码技术安全地保存凭证
- Mac电脑使用:删除保存在Mac电脑自带的Safari浏览器、谷歌浏览器、火狐浏览器中的账号和密码的方法
- android使用SharedPreferences实现记住账号密码
- Android数据存储之SharedPreferences的简单使用(保存用户名和密码)
- 使用SQLite将用户账号密码保存到本地
- SSH项目中在action中使用cookie保存账号和密码
- 使用文件保存数据以及在此基础上实现判断登陆账号密码匹配问题的实现
- android登录之后保存账号密码
- android下保存用户账号密码和读取账号密码
- Android--模拟登陆用户名密码,使用File或openFileOutput保存文件