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

目录
相关文章
|
6天前
|
Android开发
Android实现页面渐变效果
Android实现页面渐变效果
22 1
|
6天前
|
数据安全/隐私保护 Android开发
2023安卓逆向 -- 某合伙apk登录加密分析
2023安卓逆向 -- 某合伙apk登录加密分析
33 0
|
6天前
|
XML Java Android开发
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
188 0
|
5天前
|
Android开发
Android WindowFeature小探究,Android客户端Web页面通用性能优化实践
Android WindowFeature小探究,Android客户端Web页面通用性能优化实践
|
6天前
|
XML Android开发 数据格式
Android注册登录页面2
Android注册登录页面
32 2
|
XML 前端开发 数据处理
Android——MVC、MVP、MVVM框架实现登录示例
MVC 描述 缺点 优点 MVP 效果图 描述 缺点 优点 代码解析 视图效果图 建立实体类 建立实体类接口 实现实体类接口 设置P层 建立交互接口 数据绑定 MVVM 效果图 描述 代码解析 导入dataBinding 实体类 建立viewmodel xml绑定数据 视图与数据绑定
367 0
Android——MVC、MVP、MVVM框架实现登录示例
|
4天前
|
设计模式 算法 前端开发
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
|
3天前
|
编解码 数据库 Android开发
安卓应用开发:打造高效用户界面的五大技巧
【5月更文挑战第18天】在竞争激烈的应用市场中,一个流畅且直观的用户界面(UI)对于安卓应用的成功至关重要。本文将探讨五种提升安卓应用用户界面性能的技巧,包括合理布局设计、优化资源使用、利用硬件加速、内存管理以及响应式编程。通过这些方法,开发者可以创建出既美观又高效的应用体验,从而吸引和保留用户。
|
4天前
|
XML Android开发 数据格式
ConstraintLayout 2,Android高级开发面试
ConstraintLayout 2,Android高级开发面试
|
4天前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结