移动技术开发:保存密码和自动登录

server/2024/10/17 17:34:50/

1 实验名称

       保存密码和自动登录

2 实验目的

       掌握利用SharedPreference实现记住密码和自动登录功能。

3 实验源代码

布局文件代码:

(1)activity_main.xml

java"><?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TableRow><TextViewandroid:text="账号"android:layout_marginRight="10dp"android:textSize="18sp"/><EditTextandroid:id="@+id/userNameET"android:hint="请输入账号"/></TableRow><TableRow><TextViewandroid:text="密码"android:layout_marginRight="10dp"android:textSize="18sp"/><EditTextandroid:id="@+id/passWordET"android:hint="请输入密码"/></TableRow><TableRow><CheckBoxandroid:id="@+id/savePwdCB"android:text="记住密码"/><CheckBoxandroid:id="@+id/autoLoginCB"android:text="自动登录"/><Buttonandroid:id="@+id/loginBtn"android:text="登录"/></TableRow></TableLayout>

(2)activity_login_success.xml

java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".LoginSuccessActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="登录成功"/></LinearLayout>

Java代码:

(1)MainActivity

java">package com.example.savelogininfotest;import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class MainActivity extends AppCompatActivity {private EditText userNameET = null;private EditText passWordET = null;private CheckBox savePwdCB = null;private CheckBox autoLoginCB = null;private Button loginBtn = null;private String userName = null;private String userPwd= null;private SharedPreferences loginPreferences = null;private SharedPreferences.Editor loginEditor = null;private boolean isSavePwd = false;//用户是否选中记住密码的标志变量private boolean isAutoLogin = false;//用户是否选中自动登录的标志变量@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);userNameET = findViewById(R.id.userNameET);passWordET = findViewById(R.id.passWordET);savePwdCB = findViewById(R.id.savePwdCB);autoLoginCB = findViewById(R.id.autoLoginCB);loginBtn = findViewById(R.id.loginBtn);loginBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//创建存取用户名和密码以及是否记住密码和是否自动登录的标志变量的编辑器loginEditor = loginPreferences.edit();userName = userNameET.getText().toString().trim();//获取用户输入的用户名userPwd = passWordET.getText().toString().trim();//获取用户输入的密码//编辑器将用户名和密码以键值对的方式封装loginEditor.putString("userName",userName);loginEditor.putString("userPwd",userPwd);//编辑器将是否记住密码和是否自动登录的值以键值对的方式封装loginEditor.putBoolean("isSavePwd",savePwdCB.isChecked());loginEditor.putBoolean("isAutoLogin",autoLoginCB.isChecked());loginEditor.commit();//将前面的四个键值对提交存放到本地文件中welcomeLoad();//调用跳转到登录成功页面的方法}});loginPreferences = getSharedPreferences("login", Context.MODE_PRIVATE);isSavePwd = loginPreferences.getBoolean("isSavePwd",false);isAutoLogin = loginPreferences.getBoolean("isAutoLogin",false);userName = loginPreferences.getString("userName",null);userPwd = loginPreferences.getString("userPwd",null);if (isAutoLogin){//判断用户上次是否选中了“自动登录”welcomeLoad();}else {loadLogin();}}//定义跳转到登录成功页面的方法private void welcomeLoad(){//跳转到“登录成功”Intent intent = new Intent(MainActivity.this, LoginSuccessActivity.class);startActivity(intent);}//定义登录方法private void loadLogin(){if (isSavePwd){//判断用户上次是否选中了“记住密码”userNameET.setText(userName);//将用户名填充到输入文本框passWordET.setText(userPwd);//将密码填充到输入文本框savePwdCB.setChecked(true);//将“记住密码”选择框勾选住}//为“自动登录”选择框添加事件监听autoLoginCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (isChecked){//如果勾选了“自动登录”savePwdCB.setChecked(true);//将“记住密码”选择框勾选住}}});}
}

(2)LoginSuccessActivity

java">package com.example.savelogininfotest;import android.os.Bundle;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class LoginSuccessActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login_success);}
}

4 实验运行结果图

5 实验总结

       同之前一样,先写布局文件,有两个布局文件,第一个布局文件是自动登录和记住密码的界面,输入账号和密码,选择记住密码、自动登录;第二个布局文件是登录后的界面,显示登录成功。

       写完布局文件,开始写Java代码。定义两个方法,一个是跳转到登录成功页面的方法,另一个是登录方法;创建存取用户名和密码以及是否记住密码和是否自动登录的标志变量的编辑器,编辑器将用户名和密码以及是否记住密码和是否自动登录以键值对的方式封装,并将这四个键值对提交存放到本地文件中;关于自动登录还有一个,那就是判断上次登录是否选择自动登录,如果没有选择,就显示登录界面,如果上次登录时选择了自动登录,那么新一次登录时将自动跳转到登录成功的界面;关于记住密码,如果用户上次选择了记住密码,呐用户名和密码将填充到文本输入框。


http://www.ppmy.cn/server/131187.html

相关文章

leetcode hot 100 之【LeetCode 1. 两数之和】 java实现

LeetCode 1. 两数之和 题目描述 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那两个整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素不能使用两遍。 示例: 给定…

代码执行时间

文章目录 System.currentTimeMillisSystem.nanoTimenew DateSpring StopWatch简单的运行时间多个运行时间StopWatch. TaskInfoSpring StopWatch其它API commons-lang3 StopWatch 多种获取代码运行时长的方法&#xff0c; System.currentTimeMillis 通过java内置的方法System.c…

详解安卓和IOS的唤起APP的机制,包括第三方平台的唤起方法比如微信

网页唤起APP是一种常见的跨平台交互方式&#xff0c;它允许用户从网页直接跳转到移动应用程序。 这种技术广泛应用于各种场景&#xff0c;比如让用户在浏览器中点击链接后直接打开某个应用&#xff0c;或者从网页引导用户下载安装应用。实现这一功能主要依赖于URL Scheme、Univ…

网络通信——流量与路由(万字解读)

前言:流量控制与路由更新控制 如何控制网络流量可达性? 方案一:可通过修改路由条目(即对接收和发布的路由进行过滤)来控制流量可达性,这种方式称为路由策略。 方案二:可直接通过依据用户制定的策略进行转发,且该策略优于路由表转发,这种方式称为策略路由。 (1)什么…

无人机之交互系统篇

一、系统构成 无人机交互系统通常由多个子系统组成&#xff0c;包括但不限于&#xff1a; 多模式人机交互装置&#xff1a;这是人机交互系统的基础层&#xff0c;通常包括计算机、局域网、传感器等设备&#xff0c;用于实现操作员与无人机之间的数据交互和指令传递。例如&…

前端框架对比与选择:详尽分析

1. 引言 随着互联网技术的飞速发展,前端开发技术也得到了迅猛提升。无论是大型企业还是中小型开发团队,使用前端框架来简化开发过程、提升开发效率已成为一种普遍现象。如今,市场上有众多的前端框架可供选择,如React、Vue.js、Angular等,如何在这些框架中进行选择成为了开…

vr眼镜? vr视频? 如何使用? -----结合亲身经历稍微介绍一下

废话不多说&#xff0c;直接先说我的实操体验。 &#xff08;我买的型号是&#xff1a;千幻魔镜G04 属于便宜的了&#xff09; 如何用vr眼镜看vr视频 1.准备好vr视频&#xff0c;就是360视频。 2.手机上下载可以播放360视频的软件&#xff0c;播放该视频。 3.把手机放到vr…

科大讯飞大数据面试题及参考答案

数仓分层的理解及其好处,每一层的作用是什么? 数据仓库分层是一种将数据按照不同的逻辑层次进行组织和管理的方法。通常分为源数据层、贴源数据层、数据仓库层、数据集市层和应用层等。 源数据层(ODS层)是数据的原始来源,包括各种业务系统、数据库、文件等。这一层的数据通…