記事ディレクトリ
以下は、Android の実際の開発都市プロジェクトに基づくログイン、登録、ホームページ モジュールです。
- 3 つのページ モジュールのレンダリング。ここでは Java コードを示していますが、XML コードは誰でも実装できると思います。必要に応じて、プライベート メッセージを無料で送信できます。
1. ホームページ
- ホームページの機能要件:
1. プロンプト ボックス
2. 階層継承を使用してログイン ページ メソッドを継承します
3. ログイン ページに戻ります< a i =3> 4. アカウントをキャンセルできます コードは次のとおりです。コメントを読むと理解できます
package com.liujintao.day02_code.login;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.liujintao.day02_code.R;
import org.w3c.dom.Text;
/**
* 使用继承(多继承)实现了多个类的继承 AppCompatActivity LoginTest1 两个类
*/
public class HomeTest1 extends LoginTest1 implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_test1);
// 获取跳转至登录页面的图标
findViewById(R.id.home_go_login_button).setOnClickListener(this);
findViewById(R.id.father_id).setOnClickListener(this);
// 获取注销事件对象
findViewById(R.id.home_remove_id).setOnClickListener(this);
// 判断加载弹框
if (!LoginTest1.USERNAME.equals("") && !LoginTest1.PASSWORD.equals("")) {
handleToast("登陆成功!");
} else {
handleToast("点击右上角图标按钮,去登录!");
}
}
// 重写事件触发接口的抽象方法
public void onClick (View v) {
// 判断 id 来解决 传递过来需要触发那个事件
if (v.getId() == R.id.home_go_login_button) {
// 跳转登录页面
goActivity();
handleToast("需要先登录操作哦!");
}
if (v.getId() == R.id.father_id) {
handleToast("欢迎来到测试商城app(当前只是模拟测试),注意:每一次运行都需要进行注册登录!!!");
}
// 点击注销逻辑(如果用户触发了该事件,同时满足已经有注册过的情况下才能执行逻辑,一个为空则表示未注册过,何况登录过呢?)
if (v.getId() == R.id.home_remove_id && !LoginTest1.USERNAME.equals("") || !LoginTest1.PASSWORD.equals("")) {
LoginTest1.USERNAME = "";
LoginTest1.PASSWORD = "";
handleToast("账号注销成功!");
}
}
// 提示框
public void handleToast (String message) {
// 第一步: 创建弹框 → AlerDialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 第二步: 设置弹框标题和内容
builder.setTitle("提示!");
builder.setMessage(message);
// 第三步: 添加按钮并设置点击事件 → 该按钮是单框后用户触发的业务逻辑
builder.setPositiveButton("确定", (dialog, which) -> {
// 点击提示框确认后的处理逻辑
});
// 第四步: 显示弹框
builder.show();
}
// 页面跳转方法
public void goActivity() {
startActivity(new Intent(this, LoginTest1.class));
}
}
2. ログインページ
- ログインページの機能要件:
- 1 つ目はジャンプです。ここでは、Activity 実装クラスを使用してジャンプします。Activity 実装クラスのインテント ジャンプに関するチュートリアルについては、私の Android コラムを参照してください。
- モジュール開発を採用し、ポップアップ ボックス、ジャンプ ページ、情報検証、バンドル データのパッケージ化とアンパックなどのモジュールをカプセル化します。
- ユーザーがクリックすると、要件を満たすジャンプが許可されているかどうかを確認します。たとえば、入力が空の場合はユーザーにプロンプトが表示され、パスワードが間違っている場合は同じようにプロンプトが表示されます。
- 未登録のユーザーは初回登録が必要です。そうしないと、操作を実行できません。
- ガイド付きのユーザー開発に重点を置きます。
- ログインページからパッケージ化されたデータを受け取り、保存します 主にユーザーが入力した情報が登録情報と一致するかどうかを検証するために使用されます 一致しない場合はエラーまたは未登録となります
package com.liujintao.day02_code.login;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.liujintao.day02_code.R;
import java.util.ArrayList;
public class LoginTest1 extends AppCompatActivity implements View.OnClickListener{
// 存放账号或密码的数据容器,由注册页面打包获取。
protected static String USERNAME = "";
protected static String PASSWORD = "";
// 用户输入的信息
private String getNameString = "";
private String getPasswordString = "";
// 两个复选框
CheckBox cb1, cb2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_test1);
// 返回首页
findViewById(R.id.login_return_home_id).setOnClickListener(this);
// 获取登录按钮
findViewById(R.id.login_go_home_button).setOnClickListener(this);
// 获取注册按钮
findViewById(R.id.login_go_register_button).setOnClickListener(this);
// 获取记住密码复选框
cb1 = findViewById(R.id.login_remember_password);
cb1.setOnClickListener(this);
// 获取自动登录复选框
cb2 = findViewById(R.id.login_voluntarily);
cb2.setOnClickListener(this);
/**
* 获取用户注册的数据内容
*/
Bundle bundle = getIntent().getExtras();
// 判断传递过来是否有数据,没有数据则不执行,有数据则放行
if (bundle != null) {
// 将传递过来的包裹进行解包取出包裹
String getusername = bundle.getString("put_username");
String getpassword = bundle.getString("put_password");
// 注册打包过来的信息存放有效鉴权变量中
USERNAME = getusername;
PASSWORD = getpassword;
succeedToast();
}
// // 渲染视图
// if (!USERNAME.equals("") && !PASSWORD.equals("")) {
// rememberPasswordHandle();
// }
}
public void onClick (View v) {
// 返回首页
if (v.getId() == R.id.login_return_home_id) {
goActivityHome();
}
// 账号密码登录跳转首页
if (v.getId() == R.id.login_go_home_button) {
loginSucceedHandle();
}
// 点击跳转注册页面
if (v.getId() == R.id.login_go_register_button) {
goActivityRegister();
}
}
/**
* 登陆成功跳转逻辑
*/
private void loginSucceedHandle () {
// 获取账号密码信息,并且存进去
EditText n = findViewById(R.id.login_username_id);
this.getNameString = n.getText().toString();
EditText p = findViewById(R.id.login_password_id);
this.getPasswordString = p.getText().toString();
// 测试数据
Log.e("liu", "输入的账号为:" + this.getNameString);
Log.e("liu", "输入的账号为:" + this.getPasswordString);
/**
* 数据校验和Activity跳转到额处理逻辑
*/
if (getPasswordString.equals("") && getNameString.equals("")) {
handleToast("请将信息完善");
} else {
if (USERNAME.equals("") || PASSWORD.equals("")) {
handleToast("未注册哦!请先注册!");
} else {
if (USERNAME.equals(getNameString) && PASSWORD.equals(getPasswordString)) {
goActivityHome();
handleToast("登录成功!");
} else {
handleToast("账号或密码输入错误!");
}
}
}
}
/**
* 首页跳转
*/
private void goActivityHome () {
startActivity(new Intent(this, HomeTest1.class));
}
/**
* 注册页面跳转
*/
private void goActivityRegister () {
startActivity(new Intent(this, RegisterText1.class));
}
/**
* 提示框
*/
private void handleToast (String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示:");
builder.setMessage(message);
// Lambda表达式的写法替代实现类
builder.setPositiveButton("确定", (dialog, which) -> {
// 点击确定后需要触发的逻辑
});
builder.show();
}
/**
* 登录成功的提示框
*/
private void succeedToast () {
this.handleToast("快输入注册的信息登录吧!");
this.handleToast("恭喜你,注册成功!");
}
}
3. 登録ページ
- 登録ページ機能実装
- ユーザーが入力した情報を取得する
- ユーザーがすでに存在し、登録要件を満たしているかどうかを確認します
- 要件が満たされている場合、データはパッケージ化され、ユーザーのログインを容易にするために保存するためにログイン ログイン ページに渡されます。
package com.liujintao.day02_code.login;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import com.liujintao.day02_code.R;
public class RegisterText1 extends AppCompatActivity implements View.OnClickListener {
private String userName;
private String passWord;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register_text1);
// 获取返回登录页图标和注册按钮
findViewById(R.id.register_left_button).setOnClickListener(this);
findViewById(R.id.register_button_id).setOnClickListener(this);
}
public void onClick (View v) {
if (v.getId() == R.id.register_left_button) {
RegisterGoActivity();
}
if (v.getId() == R.id.register_button_id) {
EditText username = findViewById(R.id.register_input_username);
EditText password = findViewById(R.id.register_inpout_password);
userName = username.getText().toString();
passWord = password.getText().toString();
Log.e("liu", "username" + userName );
Log.e("liu", "password" + passWord );
if (userName.equals("") && passWord.equals("")) {
RegisterhandleToast("请将信息完善后进行注册哦!");
} else {
LoginTest1 login = new LoginTest1();
if (login.USERNAME.equals(userName)) {
RegisterhandleToast("手机号或用户名已经存在,请重新输入注册!");
username.setText("");
password.setText("");
} else {
// 打包数据给登录页面
Intent intent = new Intent(this, LoginTest1.class);
Bundle bundle = new Bundle();
bundle.putString("put_username", userName);
bundle.putString("put_password", passWord );
intent.putExtras(bundle);
startActivity(intent);
finish();
}
}
}
}
public void RegisterGoActivity () {
startActivity(new Intent(this, LoginTest1.class));
}
// 提示框
/**
* 提示框
*/
public void RegisterhandleToast (String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示:");
builder.setMessage(message);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick (DialogInterface dialog, int which) {
// 点击确定后需要触发的逻辑
}
});
builder.show();
}
}
4. 注意する
- 現時点ではコンテストの準備を行っているため、リリースは比較的雑で、ソースコードを要求するプライベートメッセージがあります。送料は無料です。簡単に参照できるように。