Android开发:实战开发商城项目:实现首页、登录页面、注册页面 && 完整的通过Java代码实现从注册到登录 && 最后校验登录到首页的开发业务逻辑 && 看似简单,但适合基础新手练习巩固上手项目

下面是基于Android实战开发商城项目的登录、注册和首页的模块

  • 三个页面模块的效果图。我们展示java代码,我相信xml代码大家都能是实现出来。如果有需要,可以私信,可以免费发送!
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1、首页面

  • 首页面功能需求:

1.提示框
2.继承登录页面的方法,使用了层次继承
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实现类进行跳转,这里可以擦参考我的Android专栏有关于Activity实现类 意图跳转的教程
  2. 我们采用模块化开发,对弹框、跳转页面、信息校验、Bundle数据打包解包等模块封装
  3. 实现用户点击的时候,校验判断是否允许符合要求的跳转,例如,输入为空则提示用户,密码错误同样的进行提示用户。
  4. 没有注册过的用户第一次必须进行注册。否则无法进行操作。
  5. 注重引导式用户开发。
  6. 接收登录页面打包过来的数据进行存储,主要用于校验用户输入的和他注册的信息是否效果匹配,不匹配要么错误,要么没注册过。
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、注册页面

  • 注册页面功能实现
  1. 获取用户输入的信息
  2. 校验用户是否已经存在,符合注册要求
  3. 若是符合要求,则将数据打包传递给 login 登录页面,进行存储,方便用户登录。
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、注意

  • 由于此时此刻正在备赛,所以发布的比较马虎,有需要源码的私信。免费发送。方便参考。

猜你喜欢

转载自blog.csdn.net/Forever_Hopeful/article/details/134980162