Android注册登录页面1

简介: Android注册登录页面

需求

主题:网抑云

用户注册

(账号 密码 性别 爱好…)

(注册完成跳转到注册成功页面)

注册成功页面

(显示用户注册的详细信息)

(可以跳转到登录页面)

登录页面

(使用用户注册时的账号密码登录)

(进行判断)

登录成功页面

(欢迎XXX(用户注册时的昵称)先生/女士

分析

不能使用回车多行输入

账号(不可为空)

密码(不可为空)(隐藏的)

确认密码(比对)

昵称(不可为空)

性别(单选)

爱好(多选)

简介

简介可以为空,其他全部非空

inputType属性实现限制输入类型

点击注册 如果有空(吐司提示XXX不可为空) 从上到下提示

注册完毕之后:

跳转到注册成功页面

项目目录

.java

domain

JsonBean.java
package top.gaojc.app.domain;

import com.contrarywind.interfaces.IPickerViewData;

import java.util.List;

public class JsonBean implements IPickerViewData {

    private String name;
    private List<CityBean> city;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<CityBean> getCityList() {
        return city;
    }

    public void setCityList(List<CityBean> city) {
        this.city = city;
    }

    // 实现 IPickerViewData 接口,
    // 这个用来显示在PickerView上面的字符串,
    // PickerView会通过IPickerViewData获取getPickerViewText方法显示出来。
    @Override
    public String getPickerViewText() {
        return this.name;
    }


    public static class CityBean {

        private String name;
        private List<String> area;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<String> getArea() {
            return area;
        }

        public void setArea(List<String> area) {
            this.area = area;
        }
    }

}
UserInfo.java
package top.gaojc.app.domain;

public class UserInfo {

    // 账号
    public static String zhanghao;

    // 密码
    public static String mima;

    // 确认密码
    public static String queren;

    // 昵称
    public static String nicheng;

    // 性别
    public static String xingbie;

    // 爱好
    public static String aihao;

    // 简介
    public static String jianjie;


    public String getZhanghao() {
        return zhanghao;
    }

    public void setZhanghao(String zhanghao) {
        this.zhanghao = zhanghao;
    }

    public String getMima() {
        return mima;
    }

    public void setMima(String mima) {
        this.mima = mima;
    }

    public String getQueren() {
        return queren;
    }

    public void setQueren(String queren) {
        this.queren = queren;
    }

    public String getNicheng() {
        return nicheng;
    }

    public void setNicheng(String nicheng) {
        this.nicheng = nicheng;
    }

    public String getXingbie() {
        return xingbie;
    }

    public void setXingbie(String xingbie) {
        this.xingbie = xingbie;
    }

    public String getAihao() {
        return aihao;
    }

    public void setAihao(String aihao) {
        this.aihao = aihao;
    }

    public String getJianjie() {
        return jianjie;
    }

    public void setJianjie(String jianjie) {
        this.jianjie = jianjie;
    }

}

utils

GetJsonDataUtil.java
package top.gaojc.app.utils;

import android.content.Context;
import android.content.res.AssetManager;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class GetJsonDataUtil {
    public String getJson(Context context, String fileName) {
        StringBuilder stringBuilder = new StringBuilder();
        try {
            AssetManager assetManager = context.getAssets();
            BufferedReader bf = new BufferedReader(new InputStreamReader(
                    assetManager.open(fileName)));
            String line;
            while ((line = bf.readLine()) != null) {
                stringBuilder.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }

}

Login.java

package top.gaojc.app;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import top.gaojc.app.domain.UserInfo;

public class Login extends AppCompatActivity {

    // 初始化
    Button login;

    EditText edt_account;

    EditText edt_password;

    // 用户注册时的账号密码
    String zhanghao;

    String mima;

    // 用户登录时的账号密码
    String account;

    String password;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        // 绑定
        login = findViewById(R.id.login);
        edt_account = findViewById(R.id.account);
        edt_password = findViewById(R.id.password);

        // 获取用户注册时的账号和密码
        UserInfo userInfo = new UserInfo();
        zhanghao = userInfo.getZhanghao();
        mima = userInfo.getMima();

        // 监听点击事件
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                // 获取用户登录时输入的账号密码
                account = edt_account.getText().toString();
                password = edt_password.getText().toString();

                // 判断用户注册时的账号密码和登录输入的账号密码是否一致
                if (zhanghao.equals(account) == true && mima.equals(password) == true){
                    // 登录成功 跳转登录成功页面
                    Intent intent = new Intent(Login.this,Welcome.class);
                    startActivity(intent);
                }else {
                    // 提示用户账号或密码错误
                    Toast.makeText(Login.this,"账号或密码错误",Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

}

MainActivity.java

package top.gaojc.app;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.view.OptionsPickerView;
import com.google.gson.Gson;

import org.json.JSONArray;

import java.util.ArrayList;

import top.gaojc.app.domain.JsonBean;
import top.gaojc.app.domain.UserInfo;
import top.gaojc.app.utils.GetJsonDataUtil;

public class MainActivity extends AppCompatActivity {

    // 初始化

    // 省市区联动
    private TextView mTxt;
    private ArrayList<JsonBean> options1Items = new ArrayList<>(); //省
    private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();//市
    private ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<>();//区

    // 账号
    EditText account;

    // 密码
    EditText password;

    // 确认密码
    EditText confirmPassword;

    // 昵称
    EditText username;

    // 性别 男
    RadioButton rb_man;

    // 性别 女
    RadioButton rb_woman;

    // 爱好 吃
    CheckBox eat;

    // 爱好 喝
    CheckBox drink;

    // 爱好 玩
    CheckBox play;

    // 爱好 乐
    CheckBox happy;

    // 简介
    EditText presentation;

    // 注册按钮
    Button register;


    // 结果

    // 账号
    String zhanghao;

    // 输入框 密码
    String mima;

    // 输入框 确认密码
    String queren;

    // 输入框 昵称
    String nicheng;

    // 给数字赋值 判断男女
    int gender;

    // 按钮 性别
    String xingbie;

    // 爱好
    String aihao;

    // 输入框 简介
    String jianjie;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 省市区联动方法
        initView();
        initData();

        // 绑定
        // 账号
        account = findViewById(R.id.edt_account);

        // 密码
        password = findViewById(R.id.edt_password);

        // 确认密码
        confirmPassword = findViewById(R.id.edt_confirmPassword);

        // 昵称
        username = findViewById(R.id.edt_username);

        // 性别
        rb_man = findViewById(R.id.rb_man);
        rb_woman = findViewById(R.id.rb_woman);

        // 爱好
        eat =  findViewById(R.id.cb_eat);
        drink = findViewById(R.id.cb_drink);
        play = findViewById(R.id.cb_play);
        happy = findViewById(R.id.cb_happy);

        // 简介
        presentation = findViewById(R.id.edt_presentation);

        // 注册按钮
        register = findViewById(R.id.btn_register);


        // 监听点击事件
        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 获取账号
                zhanghao = account.getText().toString();

                // 获取密码
                mima = password.getText().toString();

                // 获取确认密码
                queren = confirmPassword.getText().toString();

                // 获取昵称
                nicheng = username.getText().toString();

                // 获取性别
                rb_woman.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        gender = 1;
                    }
                });

                if (gender == 1){
                    xingbie = "女";
                }else {
                    xingbie = "男";
                }

                // 获取爱好
                StringBuilder stringBuilder = new StringBuilder();
                if (eat.isChecked()){
                    stringBuilder.append("吃、");
                }
                if (drink.isChecked()){
                    stringBuilder.append("喝、");
                }
                if (play.isChecked()){
                    stringBuilder.append("玩、");
                }
                if (happy.isChecked()){
                    stringBuilder.append("乐");
                }

                // 获取字符串最后一个字符
                String str = stringBuilder.charAt(stringBuilder.length() - 1) + "";

                // 如果最后一个符号是、 则剪切掉
                if (str.equals("、")){
                    aihao = stringBuilder.substring(0,stringBuilder.length() - 1);
                }else {
                    aihao = stringBuilder.toString();
                }

                // 获取简介
                jianjie = presentation.getText().toString();


                // 账号密码昵称校验
                if (zhanghao.equals("") == false && zhanghao.length() != 0 &&
                        mima.equals("") == false && mima.length() != 0 && mima.equals(queren) == true &&
                        nicheng.equals("") == false && nicheng.length() != 0)
                {
                    // 数据存储
                    UserInfo userInfo = new UserInfo();
                    userInfo.setZhanghao(zhanghao);
                    userInfo.setMima(mima);
                    userInfo.setQueren(queren);
                    userInfo.setNicheng(nicheng);
                    userInfo.setXingbie(xingbie);
                    userInfo.setAihao(aihao);
                    userInfo.setJianjie(jianjie);

                    // 跳转
                    Intent intent = new Intent(MainActivity.this, Result.class);
                    startActivity(intent);

                } else if (zhanghao.equals("") == true || zhanghao.length() == 0){
                    Toast.makeText(MainActivity.this,"账号不允许为空!",Toast.LENGTH_SHORT).show();
                }else if (mima.equals("") == true || mima.length() == 0){
                    Toast.makeText(MainActivity.this,"密码不允许为空!",Toast.LENGTH_SHORT).show();
                } else if (mima.equals(queren) == false){
                    Toast.makeText(MainActivity.this,"两次密码不一致!",Toast.LENGTH_SHORT).show();
                }else if (nicheng.equals("") == true || nicheng.length() == 0){
                    Toast.makeText(MainActivity.this,"昵称不允许为空!",Toast.LENGTH_SHORT).show();
                }

            }
        });
    }


    private void initData() {
        /**
         * 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件
         * 关键逻辑在于循环体
         * */
        String JsonData = new GetJsonDataUtil().getJson(this, "province.json");//获取assets目录下的json文件数据

        ArrayList<JsonBean> jsonBean = parseData(JsonData);//用Gson 转成实体

        /**
         * 添加省份数据
         * 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,
         * PickerView会通过getPickerViewText方法获取字符串显示出来。
         */
        options1Items = jsonBean;

        for (int i = 0; i < jsonBean.size(); i++) {//遍历省份
            ArrayList<String> CityList = new ArrayList<>();//该省的城市列表(第二级)
            ArrayList<ArrayList<String>> Province_AreaList = new ArrayList<>();//该省的所有地区列表(第三级)

            for (int c = 0; c < jsonBean.get(i).getCityList().size(); c++) {//遍历该省份的所有城市
                String CityName = jsonBean.get(i).getCityList().get(c).getName();
                CityList.add(CityName);//添加城市
                ArrayList<String> City_AreaList = new ArrayList<>();//该城市的所有地区列表

                //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃
                if (jsonBean.get(i).getCityList().get(c).getArea() == null
                        || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {
                    City_AreaList.add("");
                } else {
                    City_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
                }
                Province_AreaList.add(City_AreaList);//添加该省所有地区数据
            }
            //添加城市数据
            options2Items.add(CityList);
            //添加地区数据
            options3Items.add(Province_AreaList);
        }
    }


    private void initView() {
        mTxt = (TextView) findViewById(R.id.txt);

        mTxt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showPickerView();
            }
        });
    }

    private void showPickerView() {
        OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int options2, int options3, View v) {
                //返回的分别是三个级别的选中位置
                mTxt.setText(options1Items.get(options1).getPickerViewText() + "  "
                        + options2Items.get(options1).get(options2) + "  "
                        + options3Items.get(options1).get(options2).get(options3));

            }
        })
                .setTitleText("城市选择")
                .setTitleBgColor(Color.WHITE)//设置标题的背景颜色
                .setDividerColor(Color.BLACK)//设置分割线的颜色
                .setTextColorCenter(Color.BLACK) //设置选中项文字颜色
                .setContentTextSize(20)
                .build();
        pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
        pvOptions.show();
    }

    public ArrayList<JsonBean> parseData(String result) {//Gson 解析
        ArrayList<JsonBean> detail = new ArrayList<>();
        try {
            JSONArray data = new JSONArray(result);
            // 通过构造函数来获取
            Gson gson = new Gson();
            for (int i = 0; i < data.length(); i++) {
                JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);
                detail.add(entity);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return detail;
    }
}

Android注册登录页面2:https://developer.aliyun.com/article/1473211

目录
相关文章
|
9月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1625 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
626 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
273 0
|
10月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
275 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
9月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
411 0
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
703 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
750 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
9月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1084 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
9月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1177 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡