素材巴巴 > 程序开发 >

Android安卓实战项目---登陆注册页面(源码在文末)

程序开发 2023-09-09 06:10:04

Android安卓实战项目---登陆注册页面(源码在文末🐕🐕🐕)

一.项目运行介绍

效果图:

img

img

二.具体实现

LoginActivity.java
LoginActivity.java
 package com.example.login;
 ​
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.CompoundButton;
 import android.widget.EditText;
 import android.widget.Toast;
 ​
 import androidx.appcompat.app.AppCompatActivity;
 ​
 import com.example.angel.GuideActivity;
 import com.example.angel.R;
 ​
 import org.jetbrains.annotations.Nullable;
 ​
 public class LoginActivity extends AppCompatActivity {
 ​private static final String TAG = "tag";public static final int REQUEST_CODE_REGISTER = 1;private Button btnLogin;private EditText etAccount,etPassword;private CheckBox cbRemember,cbAutoLogin;
 ​private String userName = "fxjzzyo";private String pass = "123";
 ​@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);getSupportActionBar().setTitle("登录");
 ​initView();initData();
 ​btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String account = etAccount.getText().toString();String password = etPassword.getText().toString();
 ​Log.d(TAG, "onClick: -------------" + account);Log.d(TAG, "password: -------------" + password);if (TextUtils.isEmpty(userName)) {Toast.makeText(LoginActivity.this, "还没有注册账号!", Toast.LENGTH_LONG).show();return;}
 ​if (TextUtils.equals(account, userName)) {if (TextUtils.equals(password, pass)) {
 ​Toast.makeText(LoginActivity.this, "恭喜你,登录成功!", Toast.LENGTH_LONG).show();if (cbRemember.isChecked()) {SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);SharedPreferences.Editor edit = spf.edit();edit.putString("account", account);edit.putString("password", password);edit.putBoolean("isRemember", true);if (cbAutoLogin.isChecked()) {edit.putBoolean("isLogin", true);}else {edit.putBoolean("isLogin", false);}edit.apply();
 ​}else {SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);SharedPreferences.Editor edit = spf.edit();edit.putBoolean("isRemember", false);edit.apply();}
 ​Intent intent = new Intent(LoginActivity.this, GuideActivity.class);intent.putExtra("account", account);startActivity(intent);LoginActivity.this.finish();
 ​} else {Toast.makeText(LoginActivity.this, "密码错误!", Toast.LENGTH_LONG).show();}} else {Toast.makeText(LoginActivity.this, "用户名错误!", Toast.LENGTH_LONG).show();}
 ​}});
 ​cbAutoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (isChecked) {cbRemember.setChecked(true);}}});
 ​cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (!isChecked) {cbAutoLogin.setChecked(false);}}});
 ​}
 ​
 ​
 ​private void initView() {btnLogin = findViewById(R.id.btn_login);etAccount = findViewById(R.id.et_account);etPassword = findViewById(R.id.et_password);cbRemember = findViewById(R.id.cb_remember);cbAutoLogin = findViewById(R.id.cb_auto_login);
 ​}
 ​private void initData() {SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);boolean isRemember = spf.getBoolean("isRemember", false);boolean isLogin = spf.getBoolean("isLogin", false);String account = spf.getString("account", "");String password = spf.getString("password", "");
 ​
 ​if (isLogin) {Intent intent = new Intent(LoginActivity.this, GuideActivity.class);intent.putExtra("account", account);startActivity(intent);LoginActivity.this.finish();}
 ​
 ​userName = account;pass = password;
 ​if (isRemember) {etAccount.setText(account);etPassword.setText(password);cbRemember.setChecked(true);}
 ​
 ​}
 ​public void toRegister(View view) {Intent intent = new Intent(this, RegisterActivity.class);
 ​startActivityForResult(intent, REQUEST_CODE_REGISTER);}
 ​@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_CODE_REGISTER && resultCode == RegisterActivity.RESULT_CODE_REGISTER && data != null) {Bundle extras = data.getExtras();
 ​String account = extras.getString("account", "");String password = extras.getString("password", "");
 ​etAccount.setText(account);etPassword.setText(password);
 ​userName = account;pass = password;}}
 }

这段代码是一个简单的Android应用中的登录功能代码,下面逐行解释其功能和作用:

  1. 导入相关的类和包:

package com.example.userprofile23_1;
 ​
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.CompoundButton;
 import android.widget.EditText;
 import android.widget.Toast;
 ​
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;

这些导入语句引入了用于构建Android应用界面、处理用户交互和数据存储的必要类和包。

  1. 定义一个名为LoginActivity的类,它继承自AppCompatActivity,表示这是一个用于处理界面的活动(Activity)。

public class LoginActivity extends AppCompatActivity {
  1. 声明类中需要用到的一些变量和常量:

private static final String TAG = "tag";
 public static final int REQUEST_CODE_REGISTER = 1;
 private Button btnLogin;
 private EditText etAccount, etPassword;
 private CheckBox cbRemember, cbAutoLogin;
 private String userName = "fxjzzyo";
 private String pass = "123";
  1. onCreate方法中初始化界面元素和处理点击事件:

@Override
 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);getSupportActionBar().setTitle("登录");
 ​initView();initData();
 ​// ... 省略了部分代码
 ​btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// ... 处理登录逻辑}});
 ​cbAutoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {// ... 处理自动登录复选框状态改变的逻辑}});
 ​cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {// ... 处理记住密码复选框状态改变的逻辑}});
 }
  1. initView() 方法用于初始化界面元素,将 XML 布局中的控件与变量关联起来:

private void initView() {btnLogin = findViewById(R.id.btn_login);etAccount = findViewById(R.id.et_account);etPassword = findViewById(R.id.et_password);cbRemember = findViewById(R.id.cb_remember);cbAutoLogin = findViewById(R.id.cb_auto_login);
 }
  1. initData() 方法用于初始化数据,根据用户的记住密码和自动登录的设置,更新界面元素和变量的状态:

private void initData() {SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);boolean isRemember = spf.getBoolean("isRemember", false);boolean isLogin = spf.getBoolean("isLogin", false);String account = spf.getString("account", "");String password = spf.getString("password", "");
 ​// ... 处理自动登录逻辑
 ​userName = account;pass = password;
 ​if (isRemember) {etAccount.setText(account);etPassword.setText(password);cbRemember.setChecked(true);}
 }
  1. btnLogin 按钮的点击事件处理,用于验证用户输入的用户名和密码是否匹配,并根据复选框的状态更新数据到SharedPreferences中:

btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 获取用户输入的用户名和密码String account = etAccount.getText().toString();String password = etPassword.getText().toString();
 ​if (TextUtils.isEmpty(userName)) {// 用户未注册Toast.makeText(LoginActivity.this, "还没有注册账号!", Toast.LENGTH_LONG).show();return;}
 ​if (TextUtils.equals(account, userName)) {if (TextUtils.equals(password, pass)) {// 登录成功// ... 处理登录成功逻辑} else {// 密码错误Toast.makeText(LoginActivity.this, "密码错误!", Toast.LENGTH_LONG).show();}} else {// 用户名错误Toast.makeText(LoginActivity.this, "用户名错误!", Toast.LENGTH_LONG).show();}}
 });
  1. cbAutoLogincbRemember 复选框状态改变的监听器,确保自动登录时同时记住密码,取消记住密码时取消自动登录:

cbAutoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (isChecked) {cbRemember.setChecked(true);}}
 });
 ​
 cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (!isChecked) {cbAutoLogin.setChecked(false);}}
 });
  1. toRegister(View view) 方法处理前往注册界面的按钮点击事件,启动RegisterActivity来进行用户注册:

public void toRegister(View view) {Intent intent = new Intent(this, RegisterActivity.class);startActivityForResult(intent, REQUEST_CODE_REGISTER);
 }
  1. onActivityResult(int requestCode, int resultCode, @Nullable Intent data) 方法处理从注册界面返回的结果,获取注册的用户名和密码,并更新界面元素和数据:

@Override
 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_CODE_REGISTER && resultCode == RegisterActivity.RESULT_CODE_REGISTER && data != null) {Bundle extras = data.getExtras();String account = extras.getString("account", "");String password = extras.getString("password", "");
 ​etAccount.setText(account);etPassword.setText(password);
 ​userName = account;pass = password;}
 }

这段代码实现了一个简单的登录功能,包括记住密码、自动登录、用户名和密码验证等

RegisterActivity.Java
 package com.example.login;
 ​
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
 import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.EditText;
 import android.widget.Toast;
 ​
 import androidx.appcompat.app.AppCompatActivity;
 ​
 import com.example.angel.R;
 ​
 public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
 ​public static final int RESULT_CODE_REGISTER = 0;private Button btnRegister;private EditText etAccount,etPass,etPassConfirm;private CheckBox cbAgree;
 ​@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);getSupportActionBar().setTitle("注册");
 ​etAccount = findViewById(R.id.et_account);etPass = findViewById(R.id.et_password);etPassConfirm = findViewById(R.id.et_password_confirm);cbAgree = findViewById(R.id.cb_agree);btnRegister = findViewById(R.id.btn_register);
 ​btnRegister.setOnClickListener(this);
 ​}
 ​@Overridepublic void onClick(View v) {String name = etAccount.getText().toString();String pass = etPass.getText().toString();String passConfirm = etPassConfirm.getText().toString();
 ​if (TextUtils.isEmpty(name)) {Toast.makeText(RegisterActivity.this, "用户名不能为空", Toast.LENGTH_LONG).show();
 ​return;}
 ​if (TextUtils.isEmpty(pass)) {Toast.makeText(RegisterActivity.this, "密码不能为空", Toast.LENGTH_LONG).show();return;}
 ​if (!TextUtils.equals(pass,passConfirm)) {Toast.makeText(RegisterActivity.this, "密码不一致", Toast.LENGTH_LONG).show();return;}
 ​if (!cbAgree.isChecked()) {Toast.makeText(RegisterActivity.this, "请同意用户协议", Toast.LENGTH_LONG).show();return;}
 ​// 存储注册的用户名 密码SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);SharedPreferences.Editor edit = spf.edit();edit.putString("account", name);edit.putString("password", pass);edit.apply();
 ​// 数据回传Intent intent = new Intent();Bundle bundle = new Bundle();bundle.putString("account",name);bundle.putString("password",pass);intent.putExtras(bundle);setResult(RESULT_CODE_REGISTER,intent);
 ​
 ​Toast.makeText(RegisterActivity.this, "注册成功!", Toast.LENGTH_LONG).show();this.finish();}
 }

这段代码是一个用于注册用户的 Android 应用程序的一部分。我会逐行解释每个部分的作用和功能。

  1. 导入所需的类和包:

package com.example.userprofile23_1;
 ​
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
 import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.EditText;
 import android.widget.Toast;
 ​
 import androidx.appcompat.app.AppCompatActivity;

在这个部分,代码导入了所需的 Android 类和包,以便后续使用。这些包括处理界面元素(如 EditText、Button、CheckBox)、处理数据存储(SharedPreferences)以及处理界面操作(AppCompatActivity)等。

  1. 创建 RegisterActivity 类:

public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {

这段代码定义了一个名为 RegisterActivity 的类,该类继承自 AppCompatActivity 类,并实现了 View.OnClickListener 接口。这意味着该类可以作为一个活动(Activity)来运行,并且可以响应视图上的点击事件。

  1. 声明变量和常量:

public static final int RESULT_CODE_REGISTER = 0;
 private Button btnRegister;
 private EditText etAccount, etPass, etPassConfirm;
 private CheckBox cbAgree;

这部分声明了一些变量和常量,用于处理注册界面中的各个组件。其中:

  1. 在 onCreate 方法中进行初始化:

@Override
 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);getSupportActionBar().setTitle("注册");
 ​etAccount = findViewById(R.id.et_account);etPass = findViewById(R.id.et_password);etPassConfirm = findViewById(R.id.et_password_confirm);cbAgree = findViewById(R.id.cb_agree);btnRegister = findViewById(R.id.btn_register);
 ​btnRegister.setOnClickListener(this);
 }

在这部分代码中,onCreate 方法是 Android 活动的一个生命周期方法,用于在活动创建时进行初始化操作。具体的初始化步骤包括:

  1. 实现 onClick 方法:

@Override
 public void onClick(View v) {String name = etAccount.getText().toString();String pass = etPass.getText().toString();String passConfirm = etPassConfirm.getText().toString();
 ​if (TextUtils.isEmpty(name)) {Toast.makeText(RegisterActivity.this, "用户名不能为空", Toast.LENGTH_LONG).show();return;}
 ​if (TextUtils.isEmpty(pass)) {Toast.makeText(RegisterActivity.this, "密码不能为空", Toast.LENGTH_LONG).show();return;}
 ​if (!TextUtils.equals(pass, passConfirm)) {Toast.makeText(RegisterActivity.this, "密码不一致", Toast.LENGTH_LONG).show();return;}
 ​if (!cbAgree.isChecked()) {Toast.makeText(RegisterActivity.this, "请同意用户协议", Toast.LENGTH_LONG).show();return;}
 ​SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);SharedPreferences.Editor edit = spf.edit();edit.putString("account", name);edit.putString("password", pass);edit.apply();
 ​Intent intent = new Intent();Bundle bundle = new Bundle();bundle.putString("account", name);bundle.putString("password", pass);intent.putExtras(bundle);setResult(RESULT_CODE_REGISTER, intent);
 ​Toast.makeText(RegisterActivity.this, "注册成功!", Toast.LENGTH_LONG).show();this.finish();
 }

这部分代码实现了在按钮点击事件中执行的操作,主要包括:

总之,这段代码实现了一个简单的用户注册界面,用户需要输入用户名、密码、确认密码,勾选用户协议后,点击注册按钮即可完成注册。注册成功后,用户名和密码会被保存,并传递给调用该界面的上一个活动。如果有任何输入错误或未勾选用户协议,会通过 Toast 提示用户相应的错误信息。

ic_login_background.png

img

activity_login.xml


 
 ​
 ​
 ​
 ​
 ​
 

activity_register.xml


 
 ​
 ​
 

三.项目源码

链接:百度网盘 请输入提取码** 提取码:jynl

创作不易(可做实验报告,代码讲解等)

请私信作者或

(v)15135757306


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。