Android中 记住密码(SharedPreferences)

    Android中登录界面的记住密码功能实现,将用户输入的账号和密码以SharedPreferences方式存储(注意的是,密码要用MD5明文加密)。


界面xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/et_qq"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入您的qq号码" />

    <EditText
        android:inputType="textPassword"
        android:id="@+id/et_password"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/et_qq"
        android:hint="请输入密码" />

    <CheckBox
        android:id="@+id/cb_remeber_pwd"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/et_password"
        android:text="记住密码" />

    <LinearLayout
        android:layout_below="@id/cb_remeber_pwd"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/bt_ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="确定" />
    </LinearLayout>

</RelativeLayout>

技术分享


MainActivity.java文件

import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;


/***
 * 
 *1.创建一个SharedPreferences
 *2.初始化SharedPreferences  参数1 sp的文件名称 参数2 sp的保存模式
 *3.向sp里面保存数据 首先 获取一个文本编辑器 Editor
 *4.存储完毕数据记得执行commint()保存数据
 *5.读取数据 sp.getString() sp.getInt();
 */


public class MainActivity extends Activity {
	private EditText et_qq;
	private EditText et_password;
	private CheckBox cb_remeber_pwd;
	private Button bt_ok;
	/**
	 * android系统下用于数据存储的一个方便的API
	 */
	private SharedPreferences sp;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 完成sp的初始化。
		sp = getSharedPreferences("config", MODE_PRIVATE);
		et_qq = (EditText) findViewById(R.id.et_qq);
		et_password = (EditText) findViewById(R.id.et_password);
		cb_remeber_pwd = (CheckBox) findViewById(R.id.cb_remeber_pwd);
		
		//获取sp里面存储的数据
		String savedQQ = sp.getString("qq", "");
		String savedPassword = sp.getString("password", "");
		et_qq.setText(savedQQ);
		et_password.setText(savedPassword);
		
		bt_ok = (Button) findViewById(R.id.bt_ok);
		// 给按钮注册一个点击事件。
		bt_ok.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				String qq = et_qq.getText().toString();
				String password = et_password.getText().toString();
				if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(password)) {
					Toast.makeText(getApplicationContext(),
							"对不起,qq号" + "或者密码不能为空", 0).show();
				} else {
					// 检查用户是否勾选了 记住密码的选项。
					if (cb_remeber_pwd.isChecked()) {
						// 说明勾选框被选中了。把用户名和密码给记录下来
						// 获取到一个参数文件的编辑器。
						Editor editor = sp.edit();
						editor.putString("qq", qq);
						editor.putString("password", MD5utils.encode(password));
						// 把数据给保存到sp里面
						editor.commit();
						Toast.makeText(getApplicationContext(), "用户信息已经保存", 1)
								.show();
					}
				}
			}
		});
	}

}


MainActivity.java调用的MD5utils.java文件:

package com.itheima.qqlogin;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import android.os.Message;

public class MD5utils {
	/**
	 * md5加密的工具类
	 * 
	 * @param password
	 * @return
	 */
	public static String encode(String password) {
		try {
			MessageDigest digest = MessageDigest.getInstance("md5");
			byte[] results = digest.digest(password.getBytes());
			StringBuilder sb = new StringBuilder();
			for(byte b : results){
				int number = b&0xff;
				String hex = Integer.toHexString(number);
				if(hex.length()==1){
					sb.append("0");
				}
				sb.append(hex);
			}
			return sb.toString();
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}
}

账号和密码的存储路径如下:

技术分享


导出config.xml文件,可以看到用户密码的MD5明文加密前后的xml文件里的数据:

技术分享

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。