前言

大家好,我是 Vic,今天给大家带来AndroidStudio制作登录和注册功能的实现,界面的布局介绍的概述,希望你们喜欢

每日一句:

Success is connecting with the world and making people feel. - 《名扬四海》

每日一句

设计思路

当我们面临制作登录和注册功能的实现时,我们需要先设计登录界面的布局和注册界面的布局,做到有完整的思路时才开始实现其功能效果会更好。

我们需要做个标题栏,登陆界面,实现登陆界面的功能代码块,注册界面,实现测试界面的功能模块即可完成。

标题栏的设计思路

每个APP都基本上有个标题栏,即是显示标题,标题栏的两侧大多数都有一个返回建。那么标题栏即是一个返回键和一个标题栏的制作布局。

为了避免大多数代码的冗杂,我们把这个标题栏的制作布局独立起来,标题的显示我们可以在每块主题模块上,用setText()方法来显示不同的标题。

接下来我们创建main_title_bar.xml布局文件:
具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<!--这里代码的是创建一个标题栏,左边是返回键-->
<!--我们设置RelativeLayout布局,id = "title_bar"-->
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/title_bar"android:layout_width="match_parent"android:layout_height="50dp"android:background="@android:color/transparent"><!--一个是显示返回键,一个是显示标题框--><!--通过TextView来显示,id : tv_back , tv_main_title --><TextViewandroid:id="@+id/tv_back"android:layout_width="50dp"android:layout_height="50dp"android:layout_alignParentLeft="true"android:background="@drawable/go_back_selector" /><TextViewandroid:id="@+id/tv_main_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:textColor="@android:color/white"android:textSize="20sp"/><!--其中android:background="@drawable/go_back_selector"为点击回退键时,会变化效果,其实就是一个点击更换个图片而已。--><!--我们先用这种老方法,接下来以后的文章才做代码优化效果-->
</RelativeLayout>

补充:

现在标题栏布局做好了,我们需要了解怎么换图片,就是在android:background="@drawable/go_back_selector",其实就是在drawable中创建这个go_back_selector.xml文件而已,用到了android:state_pressed="true"这个属性,当点击时就是变化的图片效果,记住state_pressed就OK。

登录界面布局

创建登录界面,我们需要标题栏显示“登录”,那么就要通过<include>标签。

我们需要设计想好美化登录界面,需要以下图片:登录背景图片login_bg.png,默认的头像图片default_icon,输入用户名的背景图片login_user_name_bg,在用户名前需要一个小标图user_name_icon,同理,输入密码框需要图片有login_psw_bg,psw_icon,按钮需要图片加以美观register_selector,根据需要的图片可自行制作。

登录界面布局模块代码

创建activity_login.xml布局文件,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<!--登录界面,用LinearLayout-->
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/login_bg"android:orientation="vertical"><!--标题栏--><include layout="@layout/main_title_bar"></include><!--显示头像,记得加入id iv_head --><ImageViewandroid:id="@+id/iv_head"android:layout_width="70dp"android:layout_height="70dp"android:layout_marginTop="25dp"android:layout_gravity="center_horizontal"android:background="@drawable/default_icon"/><!--输入框--><EditTextandroid:id="@+id/et_user_name"android:layout_width="fill_parent"android:layout_height="48dp"android:layout_marginTop="35dp"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:layout_gravity="center_horizontal"android:background="@drawable/login_user_name_bg"android:drawableLeft="@drawable/user_name_icon"android:drawablePadding="10dp"android:paddingLeft="8dp"android:gravity="center_vertical"android:hint="请输入用户名"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textSize="14sp"/><!--输入框--><EditTextandroid:id="@+id/et_psw"android:layout_width="fill_parent"android:layout_height="48dp"android:layout_gravity="center_horizontal"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:background="@drawable/login_psw_bg"android:drawableLeft="@drawable/psw_icon"android:drawablePadding="10dp"android:paddingLeft="8dp"android:gravity="center_vertical"android:hint="请输入密码"android:inputType="textPassword"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textSize="14sp"/><!--按钮--><Buttonandroid:id="@+id/btn_login"android:layout_width="fill_parent"android:layout_height="40dp"android:layout_marginTop="15dp"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:layout_gravity="center_horizontal"android:background="@drawable/register_selector"android:text="登 录"android:textColor="@android:color/white"android:textSize="18sp"/><!--显示tv register , find_psw --><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_marginTop="8dp"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:gravity="center_horizontal"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_register"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center_horizontal"android:padding="8dp"android:text="立即注册"android:textColor="@android:color/white"android:textSize="14sp" /><!--layout_weight="1" layout_width="0dp"实现均分效果--><TextViewandroid:id="@+id/tv_find_psw"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center_horizontal"android:padding="8dp"android:text="找回密码?"android:textColor="@android:color/white"android:textSize="14sp" /></LinearLayout>
</LinearLayout>

同理注册界面布局设计思路

创建注册界面,我们需要标题栏显示“注册”,那么就要通过<include>标签。那么我做了效果图,提供思路参考:

注册界面思路图

注册布局模块代码

创建activity_register.xml布局文件,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<!--注册界面-->
<!--这里的布局放置是: 1 个 ImageView 控件,用于显示用户头像;3 个 EditText 控件,用于输入用户名、密码、再次输入密码;1 个 Button 控件为注册按钮-->
<!--修改 activity_register.xml 为 LinearLayout 布局-->
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_register"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/register_bg"android:orientation="vertical"><include layout="@layout/main_title_bar"></include><!--引入标题栏--><ImageViewandroid:layout_width="70dp"android:layout_height="70dp"android:layout_gravity="center_horizontal"android:layout_marginTop="25dp"android:src="@drawable/default_icon"/><!--三个编辑框--><EditTextandroid:id="@+id/et_user_name"android:layout_width="fill_parent"android:layout_height="48dp"android:layout_gravity="center_horizontal"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:layout_marginTop="35dp"android:background="@drawable/register_user_name_bg"android:drawableLeft="@drawable/user_name_icon"android:drawablePadding="10dp"android:gravity="center_vertical"android:hint="请输入用户名"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textSize="14sp"/><EditTextandroid:id="@+id/et_psw"android:layout_width="fill_parent"android:layout_gravity="center_horizontal"android:layout_height="48dp"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:background="@drawable/register_psw_bg"android:drawableLeft="@drawable/psw_icon"android:drawablePadding="10dp"android:hint="请输入密码"android:inputType="textPassword"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textSize="14sp"/><EditTextandroid:id="@+id/et_psw_again"android:layout_width="fill_parent"android:layout_height="48dp"android:layout_gravity="center_horizontal"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:background="@drawable/register_psw_again_bg"android:drawableLeft="@drawable/psw_icon"android:drawablePadding="10dp"android:hint="请再次输入密码"android:inputType="textPassword"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textSize="14sp"/><Buttonandroid:id="@+id/btn_register"android:layout_width="fill_parent"android:layout_height="40dp"android:layout_gravity="center_horizontal"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:layout_marginTop="15dp"android:background="@drawable/register_selector"android:text="注 册"android:textColor="@android:color/white"android:textSize="18sp"/>
</LinearLayout>

MD5算法

MD5 为 Message-Digest Algorithm 5(信息--摘要算法),记住几个要点就可以了。

  • Message
  • Digest
  • MessageDigest
  • MessageDigest.getInstance( );
    由于注册登录涉及密码,我们需要对用户的密码进行 MD5 算法加密,MD5 算法是把任意长度的字符串变成固定长度(通常是128位)的16进制字符串,且此算法不可逆。

具体代码如下:

package cn.edu.gdmec.android.androidstudiodemo.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {//md5 加密算法public static String md5(String text) {MessageDigest digest = null;try {digest = MessageDigest.getInstance("md5");// 数组 byte[] result -> digest.digest( );  文本 text.getBytes(); byte[] result = digest.digest(text.getBytes());//创建StringBuilder对象 然后建议StringBuffer,安全性高//StringBuilder sb = new StringBuilder();StringBuffer sb = new StringBuffer();// result数组,digest.digest ( ); -> text.getBytes();// for 循环数组byte[] result;for (byte b : result){// 0xff 为16进制int number = b & 0xff;// number值 转换 字符串 Integer.toHexString( );String hex = Integer.toHexString(number);if (hex.length() == 1){sb.append("0"+hex);}else {sb.append(hex);}}//sb StringBuffer sb = new StringBuffer();对象实例化return sb.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();//发送异常return空字符串return "";}}
}

实现注册逻辑功能代码

完成注册页面的布局与 MD5 工具类后,进行注册界面的逻辑编写。

当在注册界面点击注册按钮后,需要获取用户名,用户密码和再次确认密码,当两次密码相同时,将用户名和密码(经过 MD5 加密)保存到 SharedPreferences 中,同时当注册成功后,需要将用户名传递到登录界面中。

RegisterActivity.java具体代码如下:

package cn.edu.gdmec.android.androidstudiodemo;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import cn.edu.gdmec.android.androidstudiodemo.utils.MD5Utils;public class RegisterActivity extends AppCompatActivity {private TextView tv_main_title;//标题private TextView tv_back;//返回按钮private Button btn_register;//注册按钮//用户名,密码,再次输入的密码的控件private EditText et_user_name,et_psw,et_psw_again;//用户名,密码,再次输入的密码的控件的获取值private String userName,psw,pswAgain;//标题布局private RelativeLayout rl_title_bar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置页面布局 ,注册界面setContentView(R.layout.activity_register);//设置此界面为竖屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);init();}private void init() {//从main_title_bar.xml 页面布局中获取对应的UI控件tv_main_title=findViewById(R.id.tv_main_title);tv_main_title.setText("注册");tv_back=findViewById(R.id.tv_back);//布局根元素rl_title_bar=findViewById(R.id.title_bar);rl_title_bar.setBackgroundColor(Color.TRANSPARENT);//从activity_register.xml 页面中获取对应的UI控件btn_register=findViewById(R.id.btn_register);et_user_name=findViewById(R.id.et_user_name);et_psw=findViewById(R.id.et_psw);et_psw_again=findViewById(R.id.et_psw_again);tv_back.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//返回键RegisterActivity.this.finish();}});//注册按钮btn_register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//获取输入在相应控件中的字符串getEditString();//判断输入框内容if(TextUtils.isEmpty(userName)){Toast.makeText(RegisterActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show();return;}else if(TextUtils.isEmpty(psw)){Toast.makeText(RegisterActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();return;}else if(TextUtils.isEmpty(pswAgain)){Toast.makeText(RegisterActivity.this, "请再次输入密码", Toast.LENGTH_SHORT).show();return;}else if(!psw.equals(pswAgain)){Toast.makeText(RegisterActivity.this, "输入两次的密码不一样", Toast.LENGTH_SHORT).show();return;/***从SharedPreferences中读取输入的用户名,判断SharedPreferences中是否有此用户名*/}else if(isExistUserName(userName)){Toast.makeText(RegisterActivity.this, "此账户名已经存在", Toast.LENGTH_SHORT).show();return;}else{Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();//把账号、密码和账号标识保存到sp里面/*** 保存账号和密码到SharedPreferences中*/saveRegisterInfo(userName, psw);//注册成功后把账号传递到LoginActivity.java中// 返回值到loginActivity显示Intent data = new Intent();data.putExtra("userName", userName);setResult(RESULT_OK, data);//RESULT_OK为Activity系统常量,状态码为-1,// 表示此页面下的内容操作成功将data返回到上一页面,如果是用back返回过去的则不存在用setResult传递data值RegisterActivity.this.finish();}}});}/*** 获取控件中的字符串*/private void getEditString(){userName=et_user_name.getText().toString().trim();psw=et_psw.getText().toString().trim();pswAgain=et_psw_again.getText().toString().trim();}/*** 从SharedPreferences中读取输入的用户名,判断SharedPreferences中是否有此用户名*/private boolean isExistUserName(String userName){boolean has_userName=false;//mode_private SharedPreferences sp = getSharedPreferences( );// "loginInfo", MODE_PRIVATESharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);//获取密码String spPsw=sp.getString(userName, "");//传入用户名获取密码//如果密码不为空则确实保存过这个用户名if(!TextUtils.isEmpty(spPsw)) {has_userName=true;}return has_userName;}/*** 保存账号和密码到SharedPreferences中SharedPreferences*/private void saveRegisterInfo(String userName,String psw){String md5Psw = MD5Utils.md5(psw);//把密码用MD5加密//loginInfo表示文件名, mode_private SharedPreferences sp = getSharedPreferences( );SharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);//获取编辑器, SharedPreferences.Editor  editor -> sp.edit();SharedPreferences.Editor editor=sp.edit();//以用户名为key,密码为value保存在SharedPreferences中//key,value,如键值对,editor.putString(用户名,密码);editor.putString(userName, md5Psw);//提交修改 editor.commit();editor.commit();}
}

实现登录逻辑功能代码

完成登录界面布局后,来实现登录界面的逻辑代码。

当点击登录按钮时,需判断用户名和密码是否为空。

若为空,则提示请输入用户名或密码,这里的判断事项比较一开始凌乱,需要细细品味;若不为空,则获取用户输入的用户名,由于用的是本地数据,需要根据用户名在 SharedPreferences 中查询是否有对应的密码,若有对应的密码且与用户输入的密码(需通过 MD5 加密)比对一致情况,则登录成功。

LoginActivity.java具体代码如下:

package cn.edu.gdmec.android.androidstudiodemo;import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;import cn.edu.gdmec.android.androidstudiodemo.utils.MD5Utils;public class LoginActivity extends AppCompatActivity{private TextView tv_main_title;//标题private TextView tv_back,tv_register,tv_find_psw;//返回键,显示的注册,找回密码private Button btn_login;//登录按钮private String userName,psw,spPsw;//获取的用户名,密码,加密密码private EditText et_user_name,et_psw;//编辑框@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);//设置此界面为竖屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);init();}//获取界面控件private void init() {//从main_title_bar中获取的idtv_main_title=findViewById(R.id.tv_main_title);tv_main_title.setText("登录");tv_back=findViewById(R.id.tv_back);//从activity_login.xml中获取的tv_register=findViewById(R.id.tv_register);tv_find_psw=findViewById(R.id.tv_find_psw);btn_login=findViewById(R.id.btn_login);et_user_name=findViewById(R.id.et_user_name);et_psw=findViewById(R.id.et_psw);//返回键的点击事件tv_back.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//登录界面销毁LoginActivity.this.finish();}});//立即注册控件的点击事件tv_register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//为了跳转到注册界面,并实现注册功能Intent intent=new Intent(LoginActivity.this,RegisterActivity.class);startActivityForResult(intent, 1);}});//找回密码控件的点击事件tv_find_psw.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//跳转到找回密码界面(此页面暂未创建)}});//登录按钮的点击事件btn_login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//开始登录,获取用户名和密码 getText().toString().trim();userName=et_user_name.getText().toString().trim();psw=et_psw.getText().toString().trim();//对当前用户输入的密码进行MD5加密再进行比对判断, MD5Utils.md5( ); psw 进行加密判断是否一致String md5Psw= MD5Utils.md5(psw);// md5Psw ; spPsw 为 根据从SharedPreferences中用户名读取密码// 定义方法 readPsw为了读取用户名,得到密码spPsw=readPsw(userName);// TextUtils.isEmptyif(TextUtils.isEmpty(userName)){Toast.makeText(LoginActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show();return;}else if(TextUtils.isEmpty(psw)){Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();return;// md5Psw.equals(); 判断,输入的密码加密后,是否与保存在SharedPreferences中一致}else if(md5Psw.equals(spPsw)){//一致登录成功Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();//保存登录状态,在界面保存登录的用户名 定义个方法 saveLoginStatus boolean 状态 , userName 用户名;saveLoginStatus(true, userName);//登录成功后关闭此页面进入主页Intent data=new Intent();//datad.putExtra( ); name , value ;data.putExtra("isLogin",true);//RESULT_OK为Activity系统常量,状态码为-1// 表示此页面下的内容操作成功将data返回到上一页面,如果是用back返回过去的则不存在用setResult传递data值setResult(RESULT_OK,data);//销毁登录界面LoginActivity.this.finish();//跳转到主界面,登录成功的状态传递到 MainActivity 中startActivity(new Intent(LoginActivity.this, MainActivity.class));return;}else if((spPsw!=null&&!TextUtils.isEmpty(spPsw)&&!md5Psw.equals(spPsw))){Toast.makeText(LoginActivity.this, "输入的用户名和密码不一致", Toast.LENGTH_SHORT).show();return;}else{Toast.makeText(LoginActivity.this, "此用户名不存在", Toast.LENGTH_SHORT).show();}}});}/***从SharedPreferences中根据用户名读取密码*/private String readPsw(String userName){//getSharedPreferences("loginInfo",MODE_PRIVATE);//"loginInfo",mode_private; MODE_PRIVATE表示可以继续写入SharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);//sp.getString() userName, "";return sp.getString(userName , "");}/***保存登录状态和登录用户名到SharedPreferences中*/private void saveLoginStatus(boolean status,String userName){//saveLoginStatus(true, userName);//loginInfo表示文件名  SharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);SharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);//获取编辑器SharedPreferences.Editor editor=sp.edit();//存入boolean类型的登录状态editor.putBoolean("isLogin", status);//存入登录状态时的用户名editor.putString("loginUserName", userName);//提交修改editor.commit();}/*** 注册成功的数据返回至此* @param requestCode 请求码* @param resultCode 结果码* @param data 数据*/@Override//显示数据, onActivityResult//startActivityForResult(intent, 1); 从注册界面中获取数据//int requestCode , int resultCode , Intent data// LoginActivity -> startActivityForResult -> onActivityResult();protected void onActivityResult(int requestCode, int resultCode, Intent data) {//super.onActivityResult(requestCode, resultCode, data);super.onActivityResult(requestCode, resultCode, data);if(data!=null){//是获取注册界面回传过来的用户名// getExtra().getString("***");String userName=data.getStringExtra("userName");if(!TextUtils.isEmpty(userName)){//设置用户名到 et_user_name 控件et_user_name.setText(userName);//et_user_name控件的setSelection()方法来设置光标位置et_user_name.setSelection(userName.length());}}}
}

补充

如做了效果,需要在清单文件中实现该类,文件的跳转,可以自己了解一下。主要介绍注册模块,登录模块。里面的注解我写的如果有不全的或者错误点,可以联系讨论。

接下来你看到如上代码有点多,那么我们可以进行代码的优化来减少代码量。

总结

  • 本文讲了AndroidStudio制作登录和注册功能的实现,界面的布局介绍,如果您还有更好地理解,欢迎沟通
  • 定位:分享 Android&Java知识点,有兴趣可以继续关注

AndroidStudio制作登录和注册功能的实现,界面的布局介绍相关推荐

  1. 【Android Studio学习】第一篇、制作一个拥有登录和注册功能的简易APP

    目录 第一部分.前言 1.目标效果 2.准备知识 第二部分.详细步骤 1.新建Empty工程 ​2.添加资源文件 3.搭建注册界面 4.搭建登录界面 5.编写注册界面和登录界面的代码 6.设置APP初 ...

  2. 用户的登录及注册功能

    今天来写一个简易版的用户登录和注册功能 先写一个DBUtil工具类 public class DBUtil {//加载数据库驱动static {try {Class.forName("com ...

  3. 用python写注册登录界面web_用Python实现web端用户登录和注册功能

    这篇文章主要介绍了用Python实现web端用户登录和注册功能的教程,需要的朋友可以参考下 用户管理是绝大部分Web网站都需要解决的问题.用户管理涉及到用户注册和登录. 用户注册相对简单,我们可以先通 ...

  4. python123注册登录_用Python实现web端用户登录和注册功能的教程

    用户管理是绝大部分Web网站都需要解决的问题.用户管理涉及到用户注册和登录. 用户注册相对简单,我们可以先通过API把用户注册这个功能实现了: _RE_MD5 = re.compile(r'^[0-9 ...

  5. 前端获取验证码、手机号登录、注册功能

    07.前端获取验证码.手机号登录.注册功能 Register.vue <template><div class="register"><div cla ...

  6. 复习Java第二个项目仿QQ聊天系统 03(两种通信类、登录以及注册功能完善) Java面试题并发编程相关知识生活【记录一个咸鱼大学生三个月的奋进生活】025

    记录一个咸鱼大学生三个月的奋进生活025 复习Java(仿QQ聊天系统03两种通信类.登录以及注册功能完善) TcpSocket类(与服务器进行通信) Server类(服务器类) TcpMessage ...

  7. Java Web 案例一 登录、注册功能实现

    实现用户登录和注册功能.项目分为 Web 层.业务逻辑层.数据访问层. 将用户信息封装在 UserBean 对象中.用户信息有:username(String).password(String).ni ...

  8. 基于struts2和hibernate的登录和注册功能——完整实例

    1.该项目使用MySQL数据库,数据库名为test,表名info,如图所示: 2.配置web.xml(Struts2使用) <?xml version="1.0" encod ...

  9. 用java数组模拟登录和注册功能

    package com.linkage.login; import java.util.Scanner; public class user { // 存储用户名和密码 public static S ...

  10. flutter基于provider状态管理设置主题颜色、实现简单登录、注册功能---页面+逻辑

    一.provider状态管理设置主题颜色 第一步: 安装依赖库 provider: ^4.3.2+3 第二步: 创建共享数据模型 import 'package:flutter/material.da ...

最新文章

  1. UVa 11021 (概率 递推) Tribles
  2. 数字信号处理中的归一化频率
  3. VTK修炼之道59:图形基本操作进阶_纹理映射
  4. 为什么选择Nginx
  5. Python之精心整理的50道入门练手习题 | Python技能树征题
  6. C#微信公众号开发系列教程三(消息体签名及加解密)
  7. raid 物理盘缓存状态_服务器raid卡、磁盘缓存的配置策略
  8. mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))...
  9. 客制化键盘编程_指尖运动会,谁是打字冠军,双十一机械键盘推荐
  10. 【资料】翘首期盼247天!《阿里巴巴Java开发手册》扫描插件详情介绍
  11. CentOS卸载自带的JDK
  12. python的简单GUI(多线程时钟)
  13. python 可视化_Python可视化二维高斯分布
  14. 前端避免XSS(跨站脚本攻击)
  15. 计算机不显示桌面文件夹,电脑保存文件路径不显示桌面怎么办
  16. 【区块链开发指南】序言
  17. 练习linux命令的软件,找到一个linux下的中文打字练习软件
  18. 2019年下半年教师资格幼儿园《综合素质》真题与参考答案
  19. 2021-11-13 信道划分介质访问控制ALOHA协议CSMA协议
  20. Jenkins的安装及使用

热门文章

  1. 在AIX环境下实施Oracle 集群RAC的结构 文平
  2. RAC知识更新之-RAC节点删除添加服务+维护RAC ocr表(摘自文平书)
  3. 6-2 递归方法:汉诺塔问题 (10 分)
  4. IDEA报Invalid bound statement (not found)错误解决办法
  5. 强化学习必知二要素:计算效率和样本效率
  6. python解决鸡兔同笼_python解决鸡兔同笼问题
  7. Python学习笔记-基础篇
  8. 用计算机弹苹果手机铃声,苹果手机如何设置铃声
  9. android微信支付+指纹支付密码错误,为什么微信付款无法指纹支付密码?如何开启指纹支付?...
  10. 微信指纹支付设置java_微信指纹支付怎么设置?微信指纹支付设置方法介绍