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文件里的数据:
时间: 2024-10-24 05:22:12