移动技术开发:注册案例

devtools/2024/9/24 5:40:44/

1 实验名称

       注册案例

2 实验目的

       掌握多个Activity的实现方法,Activity之间数据的交互实现,Intent对象的使用

3 实验源代码

布局文件代码:

(1)activity_choose_city.xml

java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".ChooseCityActivity"><ExpandableListViewandroid:id="@+id/chooseCityELV"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>

(2)activity_main.xml

java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="欢迎注册Android资源网"android:layout_gravity="center_horizontal"android:textSize="36sp"android:textColor="#00ff00"/><TableLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TableRow><TextViewandroid:text="账号"android:textSize="24sp"android:layout_marginRight="30dp"/><EditTextandroid:id="@+id/userNameET"android:layout_width="300dp"android:hint="用户名不能为空"/></TableRow><TableRow><TextViewandroid:text="密码"android:textSize="24sp"android:layout_marginRight="30dp"/><EditTextandroid:id="@+id/userPwdET"android:layout_width="300dp"android:hint="6-15位之间" /></TableRow><TableRow><TextViewandroid:text="确认密码"android:textSize="24sp"android:layout_marginRight="30dp"/><EditTextandroid:id="@+id/confirmPwdET"android:layout_width="300dp"android:hint="两次密码必须一致" /></TableRow><TableRow><TextViewandroid:text="性别"android:textSize="24sp"android:layout_marginRight="30dp"/><RadioGroupandroid:orientation="horizontal"><RadioButtonandroid:id="@+id/maleRBtn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="男"android:checked="true"/><RadioButtonandroid:id="@+id/femaleRBtn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="女"/></RadioGroup></TableRow><TableRow><Buttonandroid:id="@+id/cityBtn"android:text="所在地"android:textSize="24sp"android:layout_marginRight="30dp"android:onClick="chooseCity"/><EditTextandroid:id="@+id/cityET"android:layout_width="match_parent"/></TableRow><Buttonandroid:id="@+id/registerBtn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="注册"android:onClick="register"/></TableLayout></LinearLayout>

(3)activity_register_result.xml

java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".RegisterResultActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="恭喜您,注册成功!"android:textColor="#ff0000"android:textSize="36sp"android:gravity="center_horizontal"/><TableLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TableRow><TextViewandroid:text="您的用户名为:"/><TextViewandroid:id="@+id/userNameTV"android:textColor="#0000ff"/></TableRow><TableRow><TextViewandroid:text="您的密码为:"/><TextViewandroid:id="@+id/userPwdTV"android:textColor="#0000ff"/></TableRow><TableRow><TextViewandroid:text="您的性别为:"/><TextViewandroid:id="@+id/userGenderTV"android:textColor="#0000ff"/></TableRow><TableRow><TextViewandroid:text="您的注册城市为:"/><TextViewandroid:id="@+id/userCityTV"android:textColor="#0000ff"/></TableRow></TableLayout></LinearLayout>

(4)city_item.xml

java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/city"android:textColor="#0000ff"android:padding="5dp"android:layout_marginLeft="40dp"android:textSize="20sp"/></LinearLayout>

(5)province_item.xml

java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/province"android:textSize="24sp"android:textColor="#ff0000"android:layout_marginLeft="20dp"android:padding="10dp"/></LinearLayout>

Java代码:

(1)ChooseCityActivity

java">package com.example.registerdemo;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.SimpleExpandableListAdapter;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class ChooseCityActivity extends AppCompatActivity {private String []provinces = new String[]{"湖南省","广东省","江苏省","山东省","浙江省"};private String [][]cities = new String[][]{{"长沙市","益阳市","张家界","湘西土家族苗族自治州"},{"广州市","潮汕市","深圳市","惠州市"},{"南京市","苏州市","扬州市","徐州市"},{"青岛市","烟台市","威海市","济南市"},{"杭州市","绍兴市","金华市","舟山市"}};private List<Map<String,String>> provinceItems = new ArrayList<Map<String,String>>();private List<List<Map<String,String>>> cityItems = new ArrayList<List<Map<String,String>>>();private ExpandableListView chooseCityELV =null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_choose_city);chooseCityELV = findViewById(R.id.chooseCityELV);//调用可扩展列表数据初始化方法initDatas();//创建列表适配器SimpleExpandableListAdapter simpleExpandableListAdapter = new SimpleExpandableListAdapter(ChooseCityActivity.this,provinceItems,R.layout.province_item,new String[]{"province"},new int[]{R.id.province},cityItems,R.layout.city_item,new String[]{"city"},new int[]{R.id.city});chooseCityELV.setAdapter(simpleExpandableListAdapter);//可扩展列表的二级子项添加事件监听chooseCityELV.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {@Overridepublic boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {Intent intent =new Intent();intent.putExtra("city",cities[groupPosition][childPosition]);//将用户选择的二级子项的城市名数据到intent对象中setResult(0x11,intent);ChooseCityActivity.this.finish();//结束当前的ChooseCityActivityreturn true;}});}//对可拓展列表中的项中的数据进行初始化的方法private void initDatas(){for (int i=0;i<provinces.length;i++){Map<String,String> provinceItem = new HashMap<String,String>();provinceItem.put("province",provinces[i]);provinceItems.add(provinceItem);//省份数据集合List<Map<String,String>> cityOFProvince = new ArrayList<Map<String,String>>();for (int j=0;j<cities[i].length;j++){Map<String,String> cityItem = new HashMap<String,String>();cityItem.put("city",cities[i][j]);cityOFProvince.add(cityItem);//某省的城市数据集合}cityItems.add(cityOFProvince);//所有的城市数据集合}}
}

(2)MainActivity

java">package com.example.registerdemo;import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;import androidx.activity.EdgeToEdge;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class MainActivity extends AppCompatActivity {private EditText userNameET = null;private EditText userPwdET = null;private EditText confirmPwdET = null;private EditText cityET = null;private RadioButton maleRBtn = null;private RadioButton femaleRBtn = null;private Button registerBtn = null;private Button cityBtn = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);userNameET = findViewById(R.id.userNameET);userPwdET = findViewById(R.id.userPwdET);confirmPwdET = findViewById(R.id.confirmPwdET);cityET = findViewById(R.id.cityET);maleRBtn = findViewById(R.id.maleRBtn);femaleRBtn = findViewById(R.id.femaleRBtn);registerBtn = findViewById(R.id.registerBtn);cityBtn = findViewById(R.id.cityBtn);}public void chooseCity(View view){//创建一个意图的对象,意图是从当前的MainActivity跳转到ChooseCityActivityIntent intent = new Intent(MainActivity.this,ChooseCityActivity.class);//启动ChooseCityActivity并需要一个结果,即用户在ChooseCityActivity中选择的城市名字字符串startActivityForResult(intent,0);}//重写接收ChooseCityActivity返回的数据的方法@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode,resultCode,data);if (data != null){if (resultCode == 0x11){String city = data.getStringExtra("city");cityET.setText(city);}}}public void register(View view){//调用注册信息合法性检测String checkResult = checkInfo();if (checkResult != null){AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("注册信息失败提示");builder.setMessage(checkResult);builder.setPositiveButton("确定",null);builder.show();}else {//封装用户填写的注册信息Intent intent = new Intent(MainActivity.this, RegisterResultActivity.class);//创建意图的对象从MainActivity跳转到RegisterResultActivityintent.putExtra("userName",userNameET.getText().toString().trim());intent.putExtra("userPwd",userPwdET.getText().toString().trim());String gender = "男";if (femaleRBtn.isChecked()){gender = "女";}intent.putExtra("userGender",gender);intent.putExtra("userCity",cityET.getText().toString().trim());startActivity(intent);//启动RegisterResultActivity}}//注册信息合法性检测的方法private String checkInfo(){//检查用户名是否为空String username = userNameET.getText().toString().trim();//将userNameET中的输入数据提取出来if (username == null || username.equals("")){return "用户名不能为空,请重新输入合法用户名~";}//检查密码长度是否在6-15位String userPwd = userPwdET.getText().toString().trim();if (userPwd.length()<6 || userPwd.length()>15){return "密码位数不合法,请重新输入6-15位的密码";}//检查两次密码是否一致String userConfirmPwd = confirmPwdET.getText().toString().trim();if (!userConfirmPwd.equals(userPwd)){return "两次密码不一致,请重新确认并输入~";}return null;}}

(3)RegisterResultActivity

java">package com.example.registerdemo;import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class RegisterResultActivity extends AppCompatActivity {private TextView userNameTV = null;private TextView userPwdTV = null;private TextView userGenderTV = null;private TextView userCityTV = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register_result);userNameTV = findViewById(R.id.userNameTV);userPwdTV = findViewById(R.id.userPwdTV);userGenderTV = findViewById(R.id.userGenderTV);userCityTV = findViewById(R.id.userCityTV);//获取到从MainActivity发送过来的Intent对象Intent intent = getIntent();if (intent != null){userNameTV.setText(intent.getStringExtra("userName"));//从intent对象中通过键名取出值显示在对应的文本框中userPwdTV.setText(intent.getStringExtra("userPwd"));userGenderTV.setText(intent.getStringExtra("userGender"));userCityTV.setText(intent.getStringExtra("userCity"));}}
}

4 实验运行结果图

5 实验总结

       先写好布局文件,这个实验一共有五个布局文件。在activity_choose_city.xml布局文件中,主要是注册地的选择,因此设置了一个可扩展列表;实验在city_item.xml和province_item.xml布局文件中就是要被选择的省份和城市;在activity_main.xml布局文件中,先设置了一个文本框,文本框中的文字内容自定义,接下来设置一个表布局管理器,有五行,前三行每一行都由一个文本框和一个可编辑文本框组成,第四行是两个可选择按钮,第五行由一个按钮和一个可编辑文本框组成;而activity_register_result.xml布局文件主要是注册成功后的界面显示。

       在写Java代码过程中,要进行注册信息合法性监测,主要监测内容包括检查用户名是否为空、检查密码长度是否在6-15位和检查两次密码是否一致,注册失败将提示,注册成功要封装用户填写的注册信息;而在选择注册地时,要创建一个意图的对象,意图是从当前的MainActivity跳转到ChooseCityActivity,而城市选择要先创建列表适配器,对可扩展列表的二级子项添加事件监听,而对可扩展列表的项中的数据进行初始化。


http://www.ppmy.cn/devtools/116355.html

相关文章

重修设计模式-结构型-享元模式

重修设计模式-结构型-享元模式 复用不可变对象&#xff0c;节省内存 享元模式&#xff08;Flyweight Pattern&#xff09;核心思想是通过共享对象方式&#xff0c;达到节省内存和提高性能的目的。享元对象需是不可变对象&#xff0c;因为它会被多处代码共享使用&#xff0c;要避…

从入门到精通:PHP 100个关键技术关键词

PHP 是一种广泛用于Web开发的服务器端脚本语言&#xff0c;以其简单易学和强大的功能而闻名。通过掌握本指南中的100个关键技术关键词&#xff0c;你将逐步了解PHP的核心概念、基本语法、数据库操作、会话管理、安全性和框架等方面的知识。每个关键词都配有详细的注释&#xff…

《Nginx核心技术》第18章:基于主从模式搭建Nginx+Keepalived双机热备环境

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

Pytorch详解-Pytorch核心模块

Pytorch核心模块 一、Pytorch模块结构_pycache__Cincludelibautogradnnoptimutils 二、Lib\site-packages\torchvisiondatasetsmodelsopstransforms 三、核心数据结构——Tensor&#xff08;张量&#xff09;在深度学习中&#xff0c;时间序列数据为什么是三维张量&#xff1f;…

Leetcode算法基础篇-位运算

简介 学习链接&#xff1a;位运算&#xff08;第 13 ~ 14 天&#xff09; 位运算规则 运算符描述规则|按位或运算符只要对应的两个二进位有一个为 1 1 1 时&#xff0c;结果位就为 1 1 1。&按位与运算符只有对应的两个二进位都为 1 1 1 时&#xff0c;结果位才为 1 …

ELK企业级日志分析系统

目录 一、ELK日志分析系统简介 二、Elasticsearch介绍 三、Logstash介绍 四、Kibana介绍 五、部署ELK日志分析系统 一、ELK日志分析系统简介 ELK 是一套由 Elasticsearch、Logstash 和 Kibana 组成的开源日志分析系统&#xff0c;通常用于大规模的数据收集、处理和可视化分…

php curl发送get、post请求

直接上代码&#xff0c;如下。 注意请求参数为json格式的话,需要 json_encode($params) function doRequest($url, $method GET, $params []) {$ch curl_init();//设置抓取的urlcurl_setopt($ch, CURLOPT_URL, $url);//不设置头文件的信息作为数据流输出curl_setopt($ch, CU…

数字化转型加速,报表工具助力制造业变革

在当前全球制造业加速迈向数字化的背景下&#xff0c;企业正面临前所未有的挑战和机遇。然而&#xff0c;制造业的数字化转型并非一蹴而就&#xff0c;许多企业在推进过程中遇到了各种痛点。 制造业数字化转型的痛点 制造业的生产流程复杂&#xff0c;涉及多种设备、工艺和原…