需求
主题:网抑云
用户注册
(账号 密码 性别 爱好…)
(注册完成跳转到注册成功页面)
注册成功页面
(显示用户注册的详细信息)
(可以跳转到登录页面)
登录页面
(使用用户注册时的账号密码登录)
(进行判断)
登录成功页面
(欢迎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