当前位置: 首页 > news >正文

【Android学习】简单的登录页面和业务逻辑实现

实现功能

1 登录页:密码登录和验证码登录
2 忘记密码页:修改密码
3 页面基础逻辑 java代码

基础页面

在这里插入图片描述
在这里插入图片描述

XML

login_main.xml
<?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:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">
<!--    单选框--><RadioGroupandroid:id="@+id/rg_login"android:layout_width="match_parent"android:layout_height="@dimen/item_layout_height"android:orientation="horizontal"><RadioButtonandroid:id="@+id/rg_password"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:text="@string/login_by_password"android:textSize="@dimen/common_font_size"android:checked="true"/><RadioButtonandroid:id="@+id/rg_vertifycode"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:text="@string/login_by_vertifycode"android:textSize="@dimen/common_font_size"/></RadioGroup><LinearLayoutandroid:layout_width="match_parent"android:layout_height="@dimen/item_layout_height"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_phone"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/phone_number"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><EditTextandroid:id="@+id/et_phone"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:hint="@string/inout_phone_number"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="11"android:inputType="number"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="@dimen/item_layout_height"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_password"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/login_password"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><RelativeLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:inputType="numberPassword"android:hint="@string/input_password"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="6"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/><Buttonandroid:id="@+id/btn_forget"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="@string/forget_password"android:layout_alignParentEnd="true"android:textColorHint="@color/black"android:textSize="@dimen/common_font_size"/></RelativeLayout></LinearLayout><CheckBoxandroid:id="@+id/ck_remember"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/remember_password"android:textColorHint="@color/black"android:textSize="@dimen/common_font_size"/><Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/login"android:textColorHint="@color/black"android:textSize="@dimen/btn_font_size"/>
</LinearLayout>
login_forget_password.xml
<?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:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/input_new_password"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><EditTextandroid:id="@+id/et_password_first"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:inputType="numberPassword"android:hint="@string/input_new_password_hint"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="11"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/confirm_new_password"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><EditTextandroid:id="@+id/et_password_second"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:hint="@string/confirm_new_password_again"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="11"android:inputType="number"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/verifycode"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><RelativeLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"><EditTextandroid:id="@+id/et_verifycode"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:inputType="numberPassword"android:hint="@string/input_verifycode"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="6"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/><Buttonandroid:id="@+id/btn_verificode"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="@string/get_verifycode"android:layout_alignParentEnd="true"android:textColorHint="@color/black"android:textSize="@dimen/common_font_size"/></RelativeLayout></LinearLayout><Buttonandroid:id="@+id/btn_confirm"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/done"android:textColorHint="@color/black"android:textSize="@dimen/btn_font_size"/>
</LinearLayout>

Java

loginMain.java
package com.example.learn;import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.BlendMode;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;import com.example.learn.utils.ViewUtil;import java.util.Random;public class LoginMainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener, View.OnClickListener {private EditText et_phone;private TextView tv_password;private EditText et_password;private Button btn_forget;private CheckBox ck_remember;private RadioButton rg_password;private RadioButton rg_vertifycode;private ActivityResultLauncher<Intent> register;private Button btn_login;//定义固定密码 调试使用private String mPassword = "111111";private String verifyCode;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login_main);RadioGroup rg_login = findViewById(R.id.rg_login);et_phone = findViewById(R.id.et_phone);tv_password = findViewById(R.id.tv_password);et_password = findViewById(R.id.et_password);btn_forget = findViewById(R.id.btn_forget);ck_remember = findViewById(R.id.ck_remember);rg_password = findViewById(R.id.rg_password);rg_vertifycode = findViewById(R.id.rg_vertifycode);btn_login = findViewById(R.id.btn_login);//设置监听器rg_login.setOnCheckedChangeListener(this);//为电话号码、密码增加文本长度变换监听器et_phone.addTextChangedListener(new HideKeyboardWatch(et_phone, 11));et_password.addTextChangedListener(new HideKeyboardWatch(et_password, 6));//为忘记密码/获取验证码增加点击事件btn_forget.setOnClickListener(this);//login按钮btn_login.setOnClickListener(this);//全局registerActivityForResultregister = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),new ActivityResultCallback<ActivityResult>() {//接收返回值@Overridepublic void onActivityResult(ActivityResult result) {Intent intent = result.getData();if(intent!=null && result.getResultCode()==Activity.RESULT_OK){mPassword = intent.getStringExtra("new_password");}}});}@Overridepublic void onCheckedChanged(RadioGroup radioGroup, int checkedId) {switch (checkedId) {case R.id.rg_password://密码登录//验证码登录tv_password.setText(getString(R.string.login_password));et_password.setHint(getString(R.string.input_password));btn_forget.setText(getString(R.string.forget_password));ck_remember.setVisibility(View.VISIBLE);//显示break;case R.id.rg_vertifycode://验证码登录tv_password.setText(getString(R.string.verifycode));et_password.setHint(getString(R.string.input_verifycode));btn_forget.setText(getString(R.string.get_verifycode));ck_remember.setVisibility(View.GONE);//隐藏break;}}@Overridepublic void onClick(View view) {String phone = et_phone.getText().toString();if (phone.length() < 11) {Toast.makeText(this, "手机号码不足11位", Toast.LENGTH_SHORT).show();return;}switch (view.getId()) {case R.id.btn_forget://说明选择是密码登录// 此时按钮为忘记密码if (rg_password.isChecked()) {//此时可将手机号传递给下一个忘记密码页面Intent intent = new Intent(this, LoginForgetActivity.class);intent.putExtra("phone", phone);register.launch(intent);}else if(rg_vertifycode.isChecked()){//生成6位随机验证码verifyCode = String.format("%6d",new Random().nextInt(999999));//弹出对话框 便于用户记住验证码AlertDialog.Builder adb = new AlertDialog.Builder(this);adb.setTitle("请记住验证码");adb.setMessage("手机号"+phone+",验证码为"+verifyCode+",请输入验证码!");adb.setPositiveButton("好的",null);AlertDialog ad =adb.create();ad.show();}break;case R.id.btn_login://如果密码方式登录 判断密码是否正确if(rg_password.isChecked()){if(!mPassword.equals(et_password.getText().toString())){Toast.makeText(this,"请输入正确密码",Toast.LENGTH_SHORT).show();return;}loginSuccess();}else if(rg_vertifycode.isChecked()){if(!verifyCode.equals(et_password.getText().toString())){Toast.makeText(this,"请输入正确验证码",Toast.LENGTH_SHORT).show();return;}loginSuccess();}break;}}private void loginSuccess() {String desc=String.format("您的手机号码为%s,恭喜您登陆成功!",et_phone.getText().toString());AlertDialog.Builder adb = new AlertDialog.Builder(this);adb.setTitle("恭喜您登陆成功!");adb.setMessage("您的手机号为"+et_phone.getText().toString());adb.setNegativeButton("确定返回", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//结束当前活动页面finish();}});adb.setPositiveButton("我再看看",null);AlertDialog ad = adb.create();ad.show();}//编辑框监听器,当输入文本长度达到最大长度,隐藏键盘。private class HideKeyboardWatch implements TextWatcher {private EditText mView;private int maxLen;public HideKeyboardWatch(EditText et, int len) {this.mView = et;this.maxLen = len;}@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void afterTextChanged(Editable s) {if (s.toString().length() == maxLen) {//隐藏软键盘ViewUtil.hideKeyboard(LoginMainActivity.this, mView);}}}
}
login_forget_password.java
package com.example.learn;import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;import java.util.Random;public class LoginForgetActivity extends AppCompatActivity implements View.OnClickListener {private String mPhone;private String verifyCode;private EditText et_password_first;private EditText et_password_second;private EditText et_verifycode;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login_forget);mPhone = getIntent().getStringExtra("phone");findViewById(R.id.btn_verificode).setOnClickListener(this);findViewById(R.id.btn_confirm).setOnClickListener(this); et_password_first = findViewById(R.id.et_password_first);et_password_second = findViewById(R.id.et_password_second);et_verifycode = findViewById(R.id.et_verifycode);}@Overridepublic void onClick(View view) {switch(view.getId()){case R.id.btn_verificode://生成6位随机验证码verifyCode = String.format("%6d",new Random().nextInt(999999));//弹出对话框 便于用户记住验证码AlertDialog.Builder adb = new AlertDialog.Builder(this);adb.setTitle("请记住验证码");adb.setMessage("手机号"+mPhone+",验证码为"+verifyCode+",请输入验证码!");adb.setPositiveButton("好的",null);AlertDialog ad =adb.create();ad.show();break;case R.id.btn_confirm:String pf = et_password_first.getText().toString();String ps = et_password_second.getText().toString();if(pf.length()<6){Toast.makeText(this,"请输入正确密码",Toast.LENGTH_SHORT).show();return;}if(!pf.equals(ps)){Toast.makeText(this,"两次密码不同",Toast.LENGTH_SHORT).show();return;}if(!verifyCode.equals(et_verifycode.getText().toString())){Toast.makeText(this,"验证码不正确",Toast.LENGTH_SHORT).show();return;}Toast.makeText(this,"密码修改成功",Toast.LENGTH_SHORT).show();Intent intent = new Intent();intent.putExtra("new_password",pf);setResult(Activity.RESULT_OK,intent);finish();//结束当前页面break;}}
}

相关文章:

【Android学习】简单的登录页面和业务逻辑实现

实现功能 1 登录页&#xff1a;密码登录和验证码登录 2 忘记密码页&#xff1a;修改密码 3 页面基础逻辑 java代码 基础页面 XML login_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.and…...

Mysql数据库的基础学习

为什么使用数据库&#xff1f; 1.持久化&#xff1a;将数据保存到可掉电式存储设备中以供使用。 数据库相关概念&#xff1a; DB:数据库&#xff08;Databass&#xff09;即存储数据的仓库&#xff0c;本质是一个文件系统&#xff0c;保存了一系列有组织的数据DBMS:数据库管…...

CentOS7 安装 Kamailio

https://www.kamailio.org/wiki/packages/rpms 官方文档说 yum -y install yum-utils yum-config-manager --add-repo https://rpm.kamailio.org/centos/kamailio.repo 但目前这样其实行不通 需要这样做&#xff1a; yum install --disablerepokamailio --enablerepokamai…...

Tomcat启动闪退问题解决办法

本文将通过一系列诊断步骤帮助您找出原因&#xff0c;并提供相应的解决办法。 诊断步骤 查看日志文件 Tomcat的日志文件是解决启动问题的第一线工具。查看logs目录下的catalina.out和其他日志文件&#xff0c;这些文件经常记录了错误信息和系统崩溃的线索。 cat /path/to/to…...

单元测试之JUnit5知识点总结及代码示例

单元测试是软件开发过程中的一种验证手段&#xff0c;它针对最小的可测试部分&#xff08;通常是函数或方法&#xff09;进行检查和验证。其实单元测试还是挺重要的&#xff0c;不过国内很多公司的项目其实并没有做好单元测试&#xff0c;或者根本就没做单元测试&#xff0c;原…...

什么是数据平台——企业构建Data+AI的基础数据底座需要的决策参考

什么是数据平台 标准的解释是这样的 Wikipedia A data platform usually refers to a software platform used for collecting and managing data, and acting as a data delivery point for application and reporting software. 数据平台是指将各类数据进行整合、存储、处…...

Oracle 流stream数据的复制

Oracle 流stream数据的复制 --实验的目的是捕获scott.emp1表的变化&#xff0c;将变化应用到远程数据库scott.emp1表中。 --设置初始化参数 AQ_TM_PROCESSES1 COMPATIBLE9.2.0 LOG_PARALLELISM1 GLOBAL_NAMEStrue JOB_QUEUE_PROCESSES2 --查看数据库的名称&#xff0c;我的为o…...

「 安全设计 」68家国内外科技巨头和安全巨头参与了CISA发起的安全设计承诺,包含MFA、默认密码、CVE、VDP等七大承诺目标

美国网络安全和基础设施安全局&#xff08;CISA&#xff0c;CyberSecurity & Infrastructure Security Agency&#xff09;于2024年5月开始呼吁企业是时候将网络安全融入到技术产品的设计和制造中了&#xff0c;并发起了安全设计承诺行动&#xff0c;该承诺旨在补充和建立现…...

【K8S】pod无限重启,报错Back-off restarting failed container

1. 问题 pod启动后一直重启&#xff0c;并报Back-off restarting failed container。 原理&#xff1a; Back-off restarting failed container的Warning事件&#xff0c;一般是由于通过指定的镜像启动容器后&#xff0c;容器内部没有常驻进程&#xff0c;导致容器启动成功后…...

摸鱼文章1

1111111...

【设计模式】之适配器模式

系列文章目录 &#xff08;其他设计模式可以到 &#x1f449;&#x1f449;&#x1f449;&#xff09;设计模式_小杰不秃头的博客 &#x1f60a;&#x1f604;&#x1f61b; 前言 今天继续给大家介绍23种设计模式中的适配器模式&#xff0c;这个模式相比于其他模式比较好理解…...

Python轻量级Web框架Flask(13)—— Flask个人博客项目

0、前言: ★这部分内容是基于之前Flask学习内容的一个实战项目梳理内容,没有可以直接抄下来跑的代码,是学习了之前Flask基础知识之后,再来看这部分内容,就会对Flask项目开发流程有更清楚的认知,对一些开发细节可以进一步的学习。项目功能,通过Flask制作个人博客。项目架…...

电商技术揭秘营销相关系列文章合集(4)

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 文章目录 引言集合说明集合文章列表 引言 在数字化浪潮的推动下&#xff0c;电商行…...

LeetCode-2391. 收集垃圾的最少总时间【数组 字符串 前缀和】

LeetCode-2391. 收集垃圾的最少总时间【数组 字符串 前缀和】 题目描述&#xff1a;解题思路一&#xff1a;处理垃圾和路程单独计算。解题思路二&#xff1a;逆向思维&#xff0c;计算多走的路解题思路三&#xff1a;只记录&#xff0c;当前t需要计算几次 题目描述&#xff1a;…...

再有人说数字孪生大屏没有用,用这8条怼回去。

数字孪生大屏之所以受到欢迎&#xff0c;主要有以下几个原因&#xff1a; 实时数据可视化 数字孪生大屏可以将实时数据以直观的可视化形式展示出来&#xff0c;让用户能够一目了然地了解数据的状态和趋势。这样可以帮助用户更好地理解和分析数据&#xff0c;及时做出决策和调…...

蓝桥杯练习系统(算法训练)ALGO-946 Q神的足球赛

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 足球赛上&#xff0c;只见Q神如闪电般的速度带球时而左&#xff0c;时而右&#xff0c;时而前&#xff0c;时而后&#xff…...

【Android】Kotlin学习之Kotlin方法的声明和传参

方法声明 普通类的方法 静态类的方法 不需要构建实例对象, 可以通过类名直接访问静态方法 : NumUtil.double(1) companion object 伴生类的方法 使用companion object 在普通类里定义静态方法 参数 括号内传入方法 : 当参数是方法时, 并且是最后一个参数 , 可以使用括号外…...

微信小程序 17:小程序使用 npm 包和组件应用

目前&#xff0c;小程序中已经支持实用 npm 安装第三方包&#xff0c;从而提高小程序的开发效率&#xff0c;但是在小程序中使用 npm 包有三个限制&#xff1a; 不支持 Node.js内置库的包不支持依赖于浏览器内置对象的包不支持依赖于 C插件的包 Vant Weapp Vant Weapp是有赞…...

【mysql篇】执行delete删除大量数据后,磁盘未清空,为什么?

目录 迁移脚本删除数据以及备份数据 解决方法OPTIMIZE TABLE二进制日志按月生成数据 最近某个项目虽说用户量不大&#xff0c;但是&#xff0c;单表的数据量越来越大&#xff0c;mysql一般单表超过千万级别后&#xff0c;性能直线下降&#xff0c;所以利用shardingphere按月做了…...

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Tree Widget的说明及介绍

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 多元素控件 | Tree Widget的说明及介绍 文章编号&#x…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...