Android安卓实战项目

您所在的位置:网站首页 登录界面源码 Android安卓实战项目

Android安卓实战项目

2023-08-16 22:58| 来源: 网络整理| 查看: 265

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"; ​   @Override   protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.activity_login);       getSupportActionBar().setTitle("登录"); ​       initView();       initData(); ​       btnLogin.setOnClickListener(new View.OnClickListener() {           @Override           public 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() {           @Override           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {               if (isChecked) {                   cbRemember.setChecked(true);               }           }       }); ​       cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {           @Override           public 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);   } ​   @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;       }   } }

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

导入相关的类和包:

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应用界面、处理用户交互和数据存储的必要类和包。

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

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";

TAG:用于在日志中标记的标签。

REQUEST_CODE_REGISTER:用于在startActivityForResult中标识注册活动的请求代码。

btnLogin:登录按钮。

etAccount、etPassword:输入用户名和密码的文本框。

cbRemember、cbAutoLogin:复选框,分别表示是否记住密码和是否自动登录。

userName、pass:默认的用户名和密码。

在onCreate方法中初始化界面元素和处理点击事件:

@Override protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_login);    getSupportActionBar().setTitle("登录"); ​    initView();    initData(); ​    // ... 省略了部分代码 ​    btnLogin.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            // ... 处理登录逻辑       }   }); ​    cbAutoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {        @Override        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {            // ... 处理自动登录复选框状态改变的逻辑       }   }); ​    cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {        @Override        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {            // ... 处理记住密码复选框状态改变的逻辑       }   }); }

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); }

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);   } }

btnLogin 按钮的点击事件处理,用于验证用户输入的用户名和密码是否匹配,并根据复选框的状态更新数据到SharedPreferences中:

btnLogin.setOnClickListener(new View.OnClickListener() {    @Override    public 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();       }   } });

cbAutoLogin 和 cbRemember 复选框状态改变的监听器,确保自动登录时同时记住密码,取消记住密码时取消自动登录:

cbAutoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {    @Override    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {        if (isChecked) {            cbRemember.setChecked(true);       }   } }); ​ cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {    @Override    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {        if (!isChecked) {            cbAutoLogin.setChecked(false);       }   } });

toRegister(View view) 方法处理前往注册界面的按钮点击事件,启动RegisterActivity来进行用户注册:

public void toRegister(View view) {    Intent intent = new Intent(this, RegisterActivity.class);    startActivityForResult(intent, REQUEST_CODE_REGISTER); }

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; ​   @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); ​   } ​   @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();   } }

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

导入所需的类和包:

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)等。

创建 RegisterActivity 类:

public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {

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

声明变量和常量:

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

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

RESULT_CODE_REGISTER 是一个常量,用于表示注册操作的结果代码。

btnRegister 是一个 Button 对象,代表注册按钮。

etAccount、etPass、etPassConfirm 分别是三个 EditText 对象,分别用于输入用户名、密码和确认密码。

cbAgree 是一个 CheckBox 对象,用于表示用户是否同意用户协议。

在 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 活动的一个生命周期方法,用于在活动创建时进行初始化操作。具体的初始化步骤包括:

设置活动的布局为 "activity_register",即注册界面的布局。

设置活动的标题为 "注册"。

获取用户名、密码、确认密码和同意协议的 EditText 和 CheckBox 对象。

获取注册按钮,并设置点击监听器为当前活动(实现了 View.OnClickListener 接口)。

实现 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(); }

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

获取用户名、密码和确认密码的字符串。

检查用户名、密码是否为空,以及确认密码是否与密码一致,以及是否勾选了用户协议的 CheckBox。

如果输入有误,通过 Toast 显示相应的错误消息,并返回。

如果输入正确,使用 SharedPreferences 对象存储用户名和密码。

创建一个 Intent,将用户名和密码作为额外数据存入 Bundle 中,并将 Bundle 放入 Intent 中。

使用 setResult 方法设置活动的返回结果为注册成功,并将 Intent 传递给上一个活动。

通过 Toast 显示注册成功的消息,并关闭当前活动。

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

ic_login_background.png

img

activity_login.xml

​             ​             ​             ​             ​     ​         ​         ​     ​     ​     ​ ​ ​

activity_register.xml

​     ​         ​             ​     ​         ​             ​     ​         ​             ​     ​     ​ ​

三.项目源码

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

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

请私信作者或

(v)15135757306



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3