-
javaweb登录注册功能实现 javaweb 登陆注册 入门 mysql数据库交互 web前后台交互 用户管理增删改查 实现...
2016-05-10 15:32:26用户登录注册流程图 老版: 新版: 登陆界面 注册界面 登陆成功界面 LoginServlet import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.Web...用户登录注册流程图
老版:
新版:
登陆界面
注册界面登陆成功界面
LoginServlet
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.wzc.login.dao.UserDao; import com.wzc.login.domain.User; /** * @description 登录请求处理类 * @author WANGZIC */ @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //接收表单信息 String username = request.getParameter("username"); String password = request.getParameter("password"); String verifyc = request.getParameter("verifycode"); //设置回显 request.setAttribute("username", username); request.setAttribute("password", password); request.setAttribute("verifycode", verifyc); //获取验证码 String svc =(String) request.getSession().getAttribute("sessionverify"); //根据用户名查询用户 User user =new UserDao().findUser(username); if(!svc.equalsIgnoreCase(verifyc)){ request.setAttribute("loginError", "* 验证码错误"); request.getRequestDispatcher("/login.jsp").forward(request, response); return; } if(user!=null){ if(user.getPassword().equals(password)){ request.getSession().setAttribute("user", user); response.sendRedirect("index.jsp"); }else { request.setAttribute("loginError", "* 密码错误"); request.getRequestDispatcher("/login.jsp").forward(request, response); } }else { request.setAttribute("loginError", "* 用户不存在"); request.getRequestDispatcher("/login.jsp").forward(request, response); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
RegistServlet
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.wzc.login.dao.UserDao; /** * @description 注册请求处理类 * @author WANGZIC */ @WebServlet("/RegistServlet") public class RegistServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); String rpsw = request.getParameter("rpsw"); if(username==null||username.trim().isEmpty()){ request.setAttribute("registError", "用户名不能为空"); request.getRequestDispatcher("/regist.jsp").forward(request, response); return; } if(password==null||password.trim().isEmpty()){ request.setAttribute("registError", "密码不能为空"); request.getRequestDispatcher("/regist.jsp").forward(request, response); return; } if(!password.equals(rpsw)){ request.setAttribute("registError", "密码不一致"); request.getRequestDispatcher("/regist.jsp").forward(request, response); return; } UserDao u = new UserDao(); boolean res = u.addUser(username,password); if(res){ response.sendRedirect("index.jsp"); }else { request.setAttribute("registError", "注册失败,该用户名已存在"); request.getRequestDispatcher("/regist.jsp").forward(request, response); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
LogoutServlet
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class LogoutServlet */ @WebServlet("/LogoutServlet") public class LogoutServlet extends HttpServlet { private static final long serialVersionUID = 1L; public LogoutServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getSession().removeAttribute("user"); response.sendRedirect("login.jsp"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
VerifyCodeServletimport java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @description 验证码请求生成处理类 * @author WANGZIC */ @WebServlet("/VerifyCodeServlet") public class VerifyCodeServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { VerifyCode vc = new VerifyCode(); request.getSession().setAttribute("sessionverify", vc.getText()); vc.outputImage(90,35,response.getOutputStream()); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } /** * 验证码生成工具内部类 * @author WANGZIC * */ static class VerifyCode { private static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; private static Random random = new Random(); private String text ; public String getText() { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < 4; i++) { buffer.append(CHARS[random.nextInt(CHARS.length)]); } text = buffer.toString(); return text; } public void outputImage(int width,int height,OutputStream out) throws IOException{ Color color = new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)); Color reverse = new Color(255 - color.getRed(), 255 - color.getGreen(), 255 - color.getBlue()); BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 25)); g.setColor(color); g.fillRect(0, 0, width, height); g.setColor(reverse); g.drawString(text, 10, 26); for (int i = 0, n = random.nextInt(80); i < n; i++) { g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1); } ImageIO.write(bi, "JPEG", out); } } }
User
public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
UserDaoimport java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.wzc.login.domain.User; /** * @description 数据库连接与操作类用于增删改查数据并返回给servlet使用 * @author WANGZIC * */ public class UserDao { /* * 数据库中运行下面的语句 CREATE TABLE `user` ( `username` varchar(255) NOT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; */ //根据用户名查找用户密码 public User findUser(String username){ String sql = "select * from user where username=?"; Connection con =getConnection(); PreparedStatement pstmt =null; ResultSet rs = null; User user = new User(); try { pstmt = con.prepareStatement(sql); pstmt.setString(1, username); rs = pstmt.executeQuery(); if(rs.next()){ user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); } } catch (SQLException e) { e.printStackTrace(); }finally { try { if(pstmt!=null)pstmt.close(); if(con!=null)con.close(); } catch (SQLException e) { e.printStackTrace(); } } return user; } //添加用户 public boolean addUser(String username,String psw){ Connection con = getConnection(); PreparedStatement pstmt =null; String sql = "INSERT INTO user(username,password) VALUES(?,?)"; boolean res = false; try { pstmt = con.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, psw); res = (pstmt.executeUpdate()==1); }catch (SQLException e) { if(!e.getMessage().contains("PRIMARY")){ e.printStackTrace(); } }finally { try { if(pstmt!=null)pstmt.close(); if(con!=null)con.close(); }catch (SQLException e) { e.printStackTrace(); } } return res; } //获得连接 public static Connection getConnection(){ String driver ="com.mysql.jdbc.Driver";//记得依赖mysql-jdbc驱动包 String url ="jdbc:mysql://localhost:3306/mytest";//修改为自己的数据库 String user ="root";//修改未自己数据库的用户名密码 String password ="root";//修改未自己数据库的名密码 Connection connection =null; try { Class.forName(driver); connection =DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return connection; } public static void main(String[] args) { //测试方法 // System.out.println(new UserDao().findUser("123")); // new UserDao().addUser("1345", "1345"); } }
新增了用户管理功能(对用户的增删改查)
有问题可以加QQ群:483411192
源码下载 下载完源码之后请仔细阅读README.md文件,导入运行步骤和数据库表结构都在里面 -
bootstrap创建登录注册页面
2015-12-15 18:13:16用bootstrap做登入注册页面,使用validate做表单验证 技术:bootstrap,font-awesome,jquery-validate; 特点:响应式布局,表单验证(用户两次密码是否相同,必填信息是否填写)背景图片自适应屏幕大小; 宗旨:从...扫码关注领编程教学资料 用bootstrap做登入注册页面,使用validate做表单验证
技术:bootstrap,font-awesome,jquery-validate;
特点:响应式布局,表单验证(用户两次密码是否相同,必填信息是否填写)背景图片自适应屏幕大小;
宗旨:从实战中学知识。
个人主页:http://www.itit123.cn/ 更多干货等你来拿 (微信小程序入门教程:入门教程系列 ,提供免费的api接口,无需考虑服务端代码问题)。
验证码实现功能 ITDragon博客
效果图:
html代码:
第三方资源的导入是用cdn引入;当然也可以自己去下载在本地导入。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>bootstrap案例</title> <!--用百度的静态资源库的cdn安装bootstrap环境--> <!-- Bootstrap 核心 CSS 文件 --> <link href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"> <!--font-awesome 核心我CSS 文件--> <link href="//cdn.bootcss.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet"> <!-- 在bootstrap.min.js 之前引入 --> <script src="http://apps.bdimg.com/libs/jquery/2.0.0/jquery.min.js"></script> <!-- Bootstrap 核心 JavaScript 文件 --> <script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script> <!--jquery.validate--> <script type="text/javascript" src="js/jquery.validate.min.js" ></script> <script type="text/javascript" src="js/message.js" ></script> <style type="text/css"> body{background: url(img/4.jpg) no-repeat;background-size:cover;font-size: 16px;} .form{background: rgba(255,255,255,0.2);width:400px;margin:100px auto;} #login_form{display: block;} #register_form{display: none;} .fa{display: inline-block;top: 27px;left: 6px;position: relative;color: #ccc;} input[type="text"],input[type="password"]{padding-left:26px;} .checkbox{padding-left:21px;} </style> </head> <body> <!-- 基础知识: 网格系统:通过行和列布局 行必须放在container内 手机用col-xs-* 平板用col-sm-* 笔记本或普通台式电脑用col-md-* 大型设备台式电脑用col-lg-* 为了兼容多个设备,可以用多个col-*-*来控制; --> <div class="container"> <div class="form row"> <form class="form-horizontal col-sm-offset-3 col-md-offset-3" id="login_form"> <h3 class="form-title">Login to your account</h3> <div class="col-sm-9 col-md-9"> <div class="form-group"> <i class="fa fa-user fa-lg"></i> <input class="form-control required" type="text" placeholder="Username" name="username" autofocus="autofocus" maxlength="20"/> </div> <div class="form-group"> <i class="fa fa-lock fa-lg"></i> <input class="form-control required" type="password" placeholder="Password" name="password" maxlength="8"/> </div> <div class="form-group"> <label class="checkbox"> <input type="checkbox" name="remember" value="1"/> Remember me </label> <hr /> <a href="javascript:;" id="register_btn" class="">Create an account</a> </div> <div class="form-group"> <input type="submit" class="btn btn-success pull-right" value="Login "/> </div> </div> </form> </div> <div class="form row"> <form class="form-horizontal col-sm-offset-3 col-md-offset-3" id="register_form"> <h3 class="form-title">Login to your account</h3> <div class="col-sm-9 col-md-9"> <div class="form-group"> <i class="fa fa-user fa-lg"></i> <input class="form-control required" type="text" placeholder="Username" name="username" autofocus="autofocus"/> </div> <div class="form-group"> <i class="fa fa-lock fa-lg"></i> <input class="form-control required" type="password" placeholder="Password" id="register_password" name="password"/> </div> <div class="form-group"> <i class="fa fa-check fa-lg"></i> <input class="form-control required" type="password" placeholder="Re-type Your Password" name="rpassword"/> </div> <div class="form-group"> <i class="fa fa-envelope fa-lg"></i> <input class="form-control eamil" type="text" placeholder="Email" name="email"/> </div> <div class="form-group"> <input type="submit" class="btn btn-success pull-right" value="Sign Up "/> <input type="submit" class="btn btn-info pull-left" id="back_btn" value="Back"/> </div> </div> </form> </div> </div> <script type="text/javascript" src="js/main.js" ></script> </body> </html>
js代码:
可能有不合理的方法,毕竟笔者能力有限,如有更好的方法可以留言,我会及时修改。
$().ready(function() { $("#login_form").validate({ rules: { username: "required", password: { required: true, minlength: 5 }, }, messages: { username: "请输入姓名", password: { required: "请输入密码", minlength: jQuery.format("密码不能小于{0}个字 符") }, } }); $("#register_form").validate({ rules: { username: "required", password: { required: true, minlength: 5 }, rpassword: { equalTo: "#register_password" }, email: { required: true, email: true } }, messages: { username: "请输入姓名", password: { required: "请输入密码", minlength: jQuery.format("密码不能小于{0}个字 符") }, rpassword: { equalTo: "两次密码不一样" }, email: { required: "请输入邮箱", email: "请输入有效邮箱" } } }); }); $(function() { $("#register_btn").click(function() { $("#register_form").css("display", "block"); $("#login_form").css("display", "none"); }); $("#back_btn").click(function() { $("#register_form").css("display", "none"); $("#login_form").css("display", "block"); }); });
资源下载地址:http://download.csdn.net/detail/qq_19558705/9358603
现在我们开始谈谈所用到的知识点:
①bootstrap的布局:
bootstrap用的是网格布局,使用col-*-*
使用条件:要在.container和.row下才能使用,结构如下:
<div class="container"> <div class="row"> <div class="col-*-*"></div> <div class="col-*-*"></div> </div> <div class="row">...</div> </div>
参考值:
col-xs-*:小于768px,手机col-sm-*:大于768px,平板
col-md-*:大于998px,普通电脑,笔记本之类
col-lg-*:大于1200px,一般为大型台式电脑
可以同时使用,达到跨多个设备效果
偏移:col-*-offset-*
②表单:
这里的表单和普通表单没什么太多区别,我就不多说了。
③font-awesome的使用:
使用的是4.3.0版本,使用方法
<i class="fa fa-check fa-lg"></i>
fa-lg表示大图
更多icon参考:http://fontawesome.dashgame.com/
④jquery-validate表单验证:
这是我要讲的重点,
第一步:首先到导入jquery-validate第三方资源,
第二步:创建好form表单,初始化validate
$("#login_form").validate({ rules: { username: "required", password: { required: true, minlength: 5 }, }, messages: { username: "请输入姓名", password: { required: "请输入密码", minlength: jQuery.format("密码不能小于{0}个字 符") }, } });
注意这里的login_form必须是form表单上的选择器,笔者因为将其设置在div上,控制台显示settings没有被定义的错误。这里的username和password都是form表单中的name值;rules是规则,message是提示的信息
required:true表示该字段为必填,
minlength表示长度至少为5,maxlength是html5支持的,所以不用在这里面设置
equalTo表示与某某相同,后面接的是第一个值,"#id"或者是".class"
message中对应的内容后面就是提示的文字信息。可以直接copy我的代码,然后根据自己的需要修改。
⑤背景自适应屏幕大小:
不知道前到处找文档,知道后才发现好简单,那就是background-size:cover;这样可以做到背景图片和浏览器大小一样了。很简单吧。
bootstrap创建登录注册页面github下载地址:
https://github.com/ITDragonBlog/daydayup/blob/master/bootstrap
我觉得在实战中学习比盲目学习效果好很多,知道这些知识可以做什么,解决了为什么学这些知识的问题。
我总结,你来学,一起装逼一起飞。有什么疑问和建议可以留言,我会及时修改。转载请注明来源。
-
JavaWeb入门登录注册系统
2018-07-31 04:37:20JavaWeb入门先从登录注册系统开始做起. 我的这个入门教程特别简单大家按步骤做就行一定没有问题的!源码在下面一个字不少大家认真仔细学 1、需要预先了解的几个基本概念,JSP文件和HTML文件还有XML文件,还有...JavaWeb入门先从登录注册系统开始做起.
我的这个入门教程特别简单大家按步骤做就行一定没有问题的!源码在下面一个字不少大家认真仔细学
1、需要预先了解的几个基本概念,JSP文件和HTML文件还有XML文件,还有如何创建一个WEB项目。这些东西都是百度可以查到的基本知识。
2、准备工作就是配置好JAVA运行环境和Tomcat运行环境。
3、建立一个JavaWeb项目,随便在一个项目上右键new 选择Ohter
然后新建一个Dynamic Web Project项目
这个就是JAVAWeb项目了。准备工作完成,现在开始制作项目
这里主要用java Resources文件夹还有WebContent文件夹。
在java Resources文件夹的src下面放一些java文件一般是javaben 或者放Servlet。然后WebContent下面的放html文件或者jsp文件一些前端文件。
我们的登陆注册系统 网页页面就放在WebContent下面,我们的验证账号密码是否正确还有添加新账号的这些功能代码就放在JavaResources 下面的SRC 下面 ,大概图像如下:
大家看见了吧。
然后大家就开始编写 前台html代码和后台操作代码:
比如一个简单的前台页面
建立一个login.jsp 放在WebContent下面,源码如下
比较重要的几个点我都画了起来比如 编码格式必须要换! 然后就是 action这个服务器名 就是一个会要提交的服务器 对你数据进行加工处理返回结果的东西, method是提交方式 post比较好。
效果图:
然后还有一个注册界面,再建立一个register.jsp文件
比较重要的几个点我就画出来了,记得不要出错!
运行效果图:
这样登录注册系统前台就写完了 三分之一完成!
然后开始写 后台代码功能代码!
先建立一个 RegisterServlet.java 说的好听点就是注册的服务器 处理注册界面上传的账号密码 存到数据库里面。
再建立一个 DbUtil .java 链接数据库用的!这是一个工具包 专门用来连接数据库用 代码如下 用之前记得把mysql的jar包导入到项目里面
import java.sql.Connection;
import java.sql.DriverManager;public class DbUtil {
/**
*
* @DbUtil类的作用 jdbc 的一些简单配置
* dbUrl
* dbusername
* dbpassword
* jdbcName
* @author 蒋鑫
*/private String dbUrl="jdbc:mysql://localhost:3306/mysql57";
private String dbUserName="root";
private String dbPassword="root";这里改为你数据库的账号和密码
private String jdbcName="com.mysql.jdbc.Driver";
/**
* 获取数据库连接
* @return
* @throws Exception
*/
public Connection getCon() throws Exception{
Class.forName(jdbcName);
Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
return con;
}
/**
* 关闭数据库连接
* @param con
* @throws Exception
*/
public void closeCon(Connection con) throws Exception{
if(con!=null){
con.close();
}
}
/**
* 建立一个main方法测试是否可以连接数据库成功!
* @param args
* @author 蒋鑫
*/
public static void main(String[] args) {
DbUtil dbUtil=new DbUtil();
try {
dbUtil.getCon();
System.out.println("数据库连接成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}这个工具包可以用很久的。然后写DAO类执行增加查询操作
建立一个DAO.java文件这个是用来对数据库进行操作的后台程序
里面代码如下
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class DAO {
/**
* login(Connection con,User user) 登录验证
* (Connection con,User user)注册功能
* @author 蒋鑫
*/
public user login(Connection con,user user) throws Exception{
user resultUser=null;
String sql="select * from t_user where userName=? and password=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassword());
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
resultUser=new user();
resultUser.setUserName(rs.getString("userName"));
resultUser.setPassword(rs.getString("password"));
}
return resultUser;
}
//注册功能
public boolean register(Connection con,user user) throws Exception{
boolean flag=false;
PreparedStatement pstmt = null;
String sql="INSERT INTO t_user(userName,password)VALUES(?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassword());
if (pstmt.executeUpdate() > 0) {
flag = true;
}
return flag;
}}
不要忘了 用来存储从数据库读出来的和从前台接收到的账号密码的 pojo类 建立一个user.java
写好之后准备工作完成 然后继续开始写 RegisterServlet.java 服务里面的内容。源码
import java.io.IOException;
import java.sql.Connection;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet{@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/**
* 接收前台传来的值 账号和密码
*/
String userName=req.getParameter("userName");
String password=req.getParameter("password");
DbUtil db= new DbUtil();
user user=new user(userName,password);
DAO dao=new DAO();
try {
//数据库链接
Connection con=db.getCon();
if(dao.register(con,user)) {
resp.sendRedirect("login.jsp");
}else {
resp.sendRedirect("register.jsp");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}然后继续开始写 LoginServlet.java 服务里面的内容。源码
import java.io.IOException;
import java.sql.Connection;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/**
* 接收前台传来的值 账号和密码
*/
String userName=req.getParameter("userName");
String password=req.getParameter("password");
DbUtil db= new DbUtil();
user user=new user(userName,password);
DAO dao=new DAO();
try {
//数据库链接
Connection con=db.getCon();
if(dao.login(con, user)!=null) {
resp.sendRedirect("ok.jsp");
}else {
resp.sendRedirect("register.jsp");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}都写好之后 写一个ok.jsp如果登录成功就进入这个页面 没有成功就不进去,停留在原来界面。
还有数据库的设计。
表名 user
列表 username 类型 varchar 主键 非空
列表password 类型varchar
数据库里面的内容就是这些不管你有的是什么数据库 sql还是mysql 。
所以工作完成了看下演示效果吧
总结:
1.在正确的位置建立这些正确的文件
然后里面的代码我都在上面有写 你们可以一一对战着学习 ,好了 马上四点半了 我要睡觉了 明天早上8点还有起床的,大家写的时候多注意细节单词拼写什么的。
这是我的详细视频教学,还有全部源代码压缩成了一个包在这里地址可以下载,我本想免费给大家的。但是上传后至少设置一积分。所以如果按照上面没有做出来的同学可以去下载一下里面还有视频教学。其实上面已经给出了所以的项目文件名字还有所以的项目文件里面的源代码 没有一个省略的 我自己看了又检查了一遍!不想自己拼装的同学可以下载我的压缩包里面有项目还有视频。谢谢大家阅读我的文章到此结束!
https://download.csdn.net/download/qq_42499475/10569478
-
Android用户登录注册界面
2018-03-19 19:08:56用户登录注册界面开发及用户信息管理案例详解 刚开始接触Android编程,这算是我写的第一个简单工程,主要功能有:用户登录、注册、注销、修改密码、记住密码共5个基本...用户登录注册界面开发及用户信息管理案例详解
刚开始接触Android编程,这算是我写的第一个简单工程,主要功能有:用户登录、注册、注销、修改密码、记住密码共5个基本操作,其内容涉及到以下几点:
1:Button,TextView,TextEdit,ImageView,RatioButton等基本控件的使用;
2:多个Activities之间的切换;
3:使用Android本地数据库来管理用户信息。
实现上述功能的主要参考资料:CSDN博客之星郭霖大牛写的《第一行代码—Android》,个人比较喜欢看纸质的资料,所以买了这本书,大牛的博客主页链接http://my.csdn.net/sinyu890807。其次是参考了网上的一个用户登录注册的程序,在此基础上按照自己的需求慢慢添加完善一些功能,并且将原来的单个avtivity换用多个activity实现,UI设计也更加漂亮美观。
先上几个图【我在android6.0.1的真机上调试的】:
下面是用户登录和用户注册界面。
下面是用户密码修改和个人中心界面。
一、工程代码
整个工程是在Android Studio 2.1.1环境下实现的,源码下载链接在末尾给出,下面是工程目录:这里先贴出各个布局文件.xml,各个类内容和各个activity代码:1:几个界面布局文件.xml
login.xml【登录界面】- <?xml version=“1.0” encoding=“utf-8”?>
- <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
- xmlns:tools=”http://schemas.android.com/tools”
- android:layout_width=”match_parent”
- android:layout_height=”match_parent”
- android:paddingBottom=”@dimen/activity_vertical_margin”
- android:paddingLeft=”@dimen/activity_horizontal_margin”
- android:paddingRight=”@dimen/activity_horizontal_margin”
- android:paddingTop=”@dimen/activity_vertical_margin”
- tools:context=”com.example.foolishfan.user_v10.Login”>
- <RelativeLayout
- android:id=”@+id/login_view”
- android:layout_width=”400dp”
- android:layout_height=”800dp”
- android:layout_centerInParent=”true”
- >
- <Button
- android:layout_width=”fill_parent”
- android:layout_height=”wrap_content”
- android:text=”注册”
- android:id=”@+id/login_btn_register”
- android:onClick=”resetpwd”
- android:textColor=”#ffffff”
- android:background=”#e52525”
- android:textSize=”20dp”
- android:layout_below=”@+id/login_btn_login”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true”
- android:layout_marginTop=”10dp” />
- <Button
- android:layout_width=”fill_parent”
- android:layout_height=”wrap_content”
- android:text=”登录”
- android:id=”@+id/login_btn_login”
- android:onClick=”finish_login”
- android:background=”#545bcb”
- android:textSize=”20dp”
- android:textColor=”#ffffff”
- android:layout_below=”@+id/login_edit_pwd”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true”
- android:layout_marginTop=”52dp” />
- <ImageView
- android:layout_width=”300dp”
- android:layout_height=”150dp”
- android:id=”@+id/logo”
- android:layout_alignParentRight=”true”
- android:layout_alignParentEnd=”true”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true”
- android:layout_alignParentTop=”true”
- android:layout_alignWithParentIfMissing=”false”
- android:background=”#ffffff” />
- <EditText
- android:layout_width=”400dp”
- android:layout_height=”60dp”
- android:inputType=”textPassword”
- android:ems=”10”
- android:id=”@+id/login_edit_pwd”
- android:drawableLeft=”@android:drawable/ic_lock_idle_lock”
- android:hint=”请输入您的密码”
- android:layout_below=”@+id/login_edit_account”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true” />
- <EditText
- android:layout_width=”400dp”
- android:layout_height=”60dp”
- android:inputType=”textPersonName”
- android:id=”@+id/login_edit_account”
- android:drawableLeft=”@android:drawable/ic_menu_myplaces”
- android:hint=”请输入您的用户名”
- android:layout_below=”@+id/logo”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true”
- android:layout_marginTop=”20dp” />
- <Button
- android:layout_width=”fill_parent”
- android:layout_height=”wrap_content”
- android:text=”注销”
- android:id=”@+id/login_btn_cancle”
- android:textSize=”20dp”
- android:layout_below=”@+id/login_btn_register”
- android:layout_marginTop=”10dp”
- android:layout_alignParentRight=”true”
- android:layout_alignParentEnd=”true”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true”
- android:textColor=”#ffffff”
- android:background=”#3a1313” />
- <CheckBox
- android:layout_width=”100dp”
- android:layout_height=”20dp”
- android:text=”记住密码”
- android:id=”@+id/Login_Remember”
- android:layout_below=”@+id/login_edit_pwd”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true”
- android:checked=”false”
- android:textSize=”15dp” />
- <TextView
- android:layout_width=”60dp”
- android:layout_height=”20dp”
- android:text=”修改密码”
- android:id=”@+id/login_text_change_pwd”
- android:layout_below=”@+id/login_edit_pwd”
- android:layout_alignParentRight=”true”
- android:layout_alignParentEnd=”true”
- android:textSize=”15dp” />
- </RelativeLayout>
- <RelativeLayout
- android:id=”@+id/login_success_view”
- android:layout_width=”fill_parent”
- android:layout_height=”wrap_content”
- android:layout_centerInParent=”true”
- android:layout_marginLeft=”15.0px”
- android:layout_marginRight=”15.0px”
- android:layout_marginTop=”62.0px”
- android:background=”#ff3f3f3f”
- android:paddingBottom=”10.0px”
- android:paddingTop=”21.0px”
- android:visibility=”gone” >
- <TextView
- android:id=”@+id/login_success_show”
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:layout_centerInParent=”true”
- android:textColor=”#ff3f3f3f”
- android:textSize=”20.0dip” />
- </RelativeLayout>
- </RelativeLayout>
register.xml【注册界面】<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.foolishfan.user_v10.Login"> <RelativeLayout android:id="@+id/login_view" android:layout_width="400dp" android:layout_height="800dp" android:layout_centerInParent="true" > <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="注册" android:id="@+id/login_btn_register" android:onClick="resetpwd" android:textColor="#ffffff" android:background="#e52525" android:textSize="20dp" android:layout_below="@+id/login_btn_login" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="10dp" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="登录" android:id="@+id/login_btn_login" android:onClick="finish_login" android:background="#545bcb" android:textSize="20dp" android:textColor="#ffffff" android:layout_below="@+id/login_edit_pwd" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="52dp" /> <ImageView android:layout_width="300dp" android:layout_height="150dp" android:id="@+id/logo" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="false" android:background="#ffffff" /> <EditText android:layout_width="400dp" android:layout_height="60dp" android:inputType="textPassword" android:ems="10" android:id="@+id/login_edit_pwd" android:drawableLeft="@android:drawable/ic_lock_idle_lock" android:hint="请输入您的密码" android:layout_below="@+id/login_edit_account" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="400dp" android:layout_height="60dp" android:inputType="textPersonName" android:id="@+id/login_edit_account" android:drawableLeft="@android:drawable/ic_menu_myplaces" android:hint="请输入您的用户名" android:layout_below="@+id/logo" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="20dp" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="注销" android:id="@+id/login_btn_cancle" android:textSize="20dp" android:layout_below="@+id/login_btn_register" android:layout_marginTop="10dp" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:textColor="#ffffff" android:background="#3a1313" /> <CheckBox android:layout_width="100dp" android:layout_height="20dp" android:text="记住密码" android:id="@+id/Login_Remember" android:layout_below="@+id/login_edit_pwd" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:checked="false" android:textSize="15dp" /> <TextView android:layout_width="60dp" android:layout_height="20dp" android:text="修改密码" android:id="@+id/login_text_change_pwd" android:layout_below="@+id/login_edit_pwd" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:textSize="15dp" /> </RelativeLayout> <RelativeLayout android:id="@+id/login_success_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_marginLeft="15.0px" android:layout_marginRight="15.0px" android:layout_marginTop="62.0px" android:background="#ff3f3f3f" android:paddingBottom="10.0px" android:paddingTop="21.0px" android:visibility="gone" > <TextView android:id="@+id/login_success_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textColor="#ff3f3f3f" android:textSize="20.0dip" /> </RelativeLayout> </RelativeLayout>
- <?xml version=“1.0” encoding=“utf-8”?>
- <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
- android:layout_width=”match_parent”
- android:layout_height=”match_parent”
- android:paddingBottom=”@dimen/activity_vertical_margin”
- android:paddingLeft=”@dimen/activity_horizontal_margin”
- android:paddingRight=”@dimen/activity_horizontal_margin”
- android:paddingTop=”@dimen/activity_vertical_margin”
- android:weightSum=”1”>
- <EditText
- android:drawableLeft=”@android:drawable/ic_menu_myplaces”
- android:layout_width=”wrap_content”
- android:layout_height=”60dp”
- android:inputType=”textPersonName”
- android:ems=”10”
- android:id=”@+id/resetpwd_edit_name”
- android:layout_alignParentTop=”true”
- android:hint=”请输入您的用户名”
- android:layout_alignLeft=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignStart=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignRight=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignEnd=”@+id/resetpwd_edit_pwd_new” />
- <!–
- <EditText android:id=”@+id/edt_operator_name” style=“@style/syncEditText”
- android:hint=”@string/hint_operator_name” />
- <ImageView android:id=”@+id/syncOperatorImg” style=“@style/syncImageView”
- android:layout_alignLeft=”@+id/edt_operator_name”
- android:layout_alignTop=”@+id/edt_operator_name”
- android:layout_alignBottom=”@+id/edt_operator_name” android:src=“@drawable/sync_operator” />
- –>
- <EditText
- android:drawableLeft=”@android:drawable/ic_lock_idle_lock”
- android:layout_width=”fill_parent”
- android:layout_height=”60dp”
- android:inputType=”textPassword”
- android:ems=”10”
- android:id=”@+id/resetpwd_edit_pwd_old”
- android:hint=”请输入您的密码”
- android:layout_below=”@+id/resetpwd_edit_name”
- android:layout_alignRight=”@+id/resetpwd_edit_name”
- android:layout_alignEnd=”@+id/resetpwd_edit_name”
- android:layout_alignLeft=”@+id/resetpwd_edit_name”
- android:layout_alignStart=”@+id/resetpwd_edit_name” />
- <Button
- android:layout_width=”fill_parent”
- android:layout_height=”wrap_content”
- android:text=”取消”
- android:id=”@+id/register_btn_cancel”
- android:textSize=”20dp”
- android:background=”#f71818”
- android:layout_below=”@+id/register_btn_sure”
- android:layout_alignLeft=”@+id/register_btn_sure”
- android:layout_alignStart=”@+id/register_btn_sure”
- android:layout_marginTop=”10dp” />
- <EditText
- android:drawableLeft=”@android:drawable/ic_lock_idle_lock”
- android:layout_width=”fill_parent”
- android:layout_height=”60dp”
- android:inputType=”textPassword”
- android:ems=”10”
- android:id=”@+id/resetpwd_edit_pwd_new”
- android:layout_below=”@+id/resetpwd_edit_pwd_old”
- android:layout_centerHorizontal=”true”
- android:hint=”请确认您的密码” />
- <Button
- android:layout_width=”fill_parent”
- android:layout_height=”wrap_content”
- android:text=”确定”
- android:id=”@+id/register_btn_sure”
- android:textSize=”20dp”
- android:background=”#1cf718”
- android:layout_below=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignLeft=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignStart=”@+id/resetpwd_edit_pwd_new”
- android:layout_marginTop=”20dp” />
- </RelativeLayout>
resetpwd.xml【修改密码界面】<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:weightSum="1"> <EditText android:drawableLeft="@android:drawable/ic_menu_myplaces" android:layout_width="wrap_content" android:layout_height="60dp" android:inputType="textPersonName" android:ems="10" android:id="@+id/resetpwd_edit_name" android:layout_alignParentTop="true" android:hint="请输入您的用户名" android:layout_alignLeft="@+id/resetpwd_edit_pwd_new" android:layout_alignStart="@+id/resetpwd_edit_pwd_new" android:layout_alignRight="@+id/resetpwd_edit_pwd_new" android:layout_alignEnd="@+id/resetpwd_edit_pwd_new" /> <!-- <EditText android:id="@+id/edt_operator_name" style="@style/syncEditText" android:hint="@string/hint_operator_name" /> <ImageView android:id="@+id/syncOperatorImg" style="@style/syncImageView" android:layout_alignLeft="@+id/edt_operator_name" android:layout_alignTop="@+id/edt_operator_name" android:layout_alignBottom="@+id/edt_operator_name" android:src="@drawable/sync_operator" /> --> <EditText android:drawableLeft="@android:drawable/ic_lock_idle_lock" android:layout_width="fill_parent" android:layout_height="60dp" android:inputType="textPassword" android:ems="10" android:id="@+id/resetpwd_edit_pwd_old" android:hint="请输入您的密码" android:layout_below="@+id/resetpwd_edit_name" android:layout_alignRight="@+id/resetpwd_edit_name" android:layout_alignEnd="@+id/resetpwd_edit_name" android:layout_alignLeft="@+id/resetpwd_edit_name" android:layout_alignStart="@+id/resetpwd_edit_name" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="取消" android:id="@+id/register_btn_cancel" android:textSize="20dp" android:background="#f71818" android:layout_below="@+id/register_btn_sure" android:layout_alignLeft="@+id/register_btn_sure" android:layout_alignStart="@+id/register_btn_sure" android:layout_marginTop="10dp" /> <EditText android:drawableLeft="@android:drawable/ic_lock_idle_lock" android:layout_width="fill_parent" android:layout_height="60dp" android:inputType="textPassword" android:ems="10" android:id="@+id/resetpwd_edit_pwd_new" android:layout_below="@+id/resetpwd_edit_pwd_old" android:layout_centerHorizontal="true" android:hint="请确认您的密码" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="确定" android:id="@+id/register_btn_sure" android:textSize="20dp" android:background="#1cf718" android:layout_below="@+id/resetpwd_edit_pwd_new" android:layout_alignLeft="@+id/resetpwd_edit_pwd_new" android:layout_alignStart="@+id/resetpwd_edit_pwd_new" android:layout_marginTop="20dp" /> </RelativeLayout>
- <?xml version=“1.0” encoding=“utf-8”?>
- <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
- android:layout_width=”match_parent”
- android:layout_height=”match_parent”
- android:paddingBottom=”@dimen/activity_vertical_margin”
- android:paddingLeft=”@dimen/activity_horizontal_margin”
- android:paddingRight=”@dimen/activity_horizontal_margin”
- android:paddingTop=”@dimen/activity_vertical_margin”
- android:weightSum=”1”>
- <EditText
- android:drawableLeft=”@android:drawable/ic_menu_myplaces”
- android:layout_width=”wrap_content”
- android:layout_height=”60dp”
- android:inputType=”textPersonName”
- android:ems=”10”
- android:id=”@+id/resetpwd_edit_name”
- android:layout_alignParentTop=”true”
- android:hint=”请输入您的用户名”
- android:layout_alignLeft=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignStart=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignRight=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignEnd=”@+id/resetpwd_edit_pwd_new” />
- <!–
- <EditText android:id=”@+id/edt_operator_name” style=“@style/syncEditText”
- android:hint=”@string/hint_operator_name” />
- <ImageView android:id=”@+id/syncOperatorImg” style=“@style/syncImageView”
- android:layout_alignLeft=”@+id/edt_operator_name”
- android:layout_alignTop=”@+id/edt_operator_name”
- android:layout_alignBottom=”@+id/edt_operator_name” android:src=“@drawable/sync_operator” />
- –>
- <EditText
- android:drawableLeft=”@android:drawable/ic_lock_idle_lock”
- android:layout_width=”fill_parent”
- android:layout_height=”60dp”
- android:inputType=”textPassword”
- android:ems=”10”
- android:id=”@+id/resetpwd_edit_pwd_old”
- android:hint=”请输入您的旧密码”
- android:layout_below=”@+id/resetpwd_edit_name”
- android:layout_alignRight=”@+id/resetpwd_edit_name”
- android:layout_alignEnd=”@+id/resetpwd_edit_name”
- android:layout_alignLeft=”@+id/resetpwd_edit_name”
- android:layout_alignStart=”@+id/resetpwd_edit_name” />
- <Button
- android:layout_width=”fill_parent”
- android:layout_height=”wrap_content”
- android:text=”取消”
- android:id=”@+id/resetpwd_btn_cancel”
- android:textSize=”20dp”
- android:onClick=”not_to_reset”
- android:background=”#f71818”
- android:layout_below=”@+id/resetpwd_btn_sure”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true”
- android:layout_marginTop=”20dp” />
- <EditText
- android:drawableLeft=”@android:drawable/ic_lock_idle_lock”
- android:layout_width=”fill_parent”
- android:layout_height=”60dp”
- android:inputType=”textPassword”
- android:ems=”10”
- android:id=”@+id/resetpwd_edit_pwd_new”
- android:layout_below=”@+id/resetpwd_edit_pwd_old”
- android:layout_centerHorizontal=”true”
- android:hint=”请确认您的新密码”
- />
- <Button
- android:layout_width=”fill_parent”
- android:layout_height=”wrap_content”
- android:text=”确定”
- android:id=”@+id/resetpwd_btn_sure”
- android:textSize=”20dp”
- android:onClick=”sure_to_reset”
- android:background=”#1cf718”
- android:layout_marginTop=”92dp”
- android:layout_below=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true” />
- <EditText
- android:drawableLeft=”@android:drawable/ic_lock_idle_lock”
- android:layout_width=”fill_parent”
- android:layout_height=”60dp”
- android:inputType=”textPassword”
- android:ems=”10”
- android:id=”@+id/resetpwd_edit_pwd_check”
- android:hint=”请输入您的新密码”
- android:layout_below=”@+id/resetpwd_edit_pwd_new”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true” />
- </RelativeLayout>
user.xml【个人中心】<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:weightSum="1"> <EditText android:drawableLeft="@android:drawable/ic_menu_myplaces" android:layout_width="wrap_content" android:layout_height="60dp" android:inputType="textPersonName" android:ems="10" android:id="@+id/resetpwd_edit_name" android:layout_alignParentTop="true" android:hint="请输入您的用户名" android:layout_alignLeft="@+id/resetpwd_edit_pwd_new" android:layout_alignStart="@+id/resetpwd_edit_pwd_new" android:layout_alignRight="@+id/resetpwd_edit_pwd_new" android:layout_alignEnd="@+id/resetpwd_edit_pwd_new" /> <!-- <EditText android:id="@+id/edt_operator_name" style="@style/syncEditText" android:hint="@string/hint_operator_name" /> <ImageView android:id="@+id/syncOperatorImg" style="@style/syncImageView" android:layout_alignLeft="@+id/edt_operator_name" android:layout_alignTop="@+id/edt_operator_name" android:layout_alignBottom="@+id/edt_operator_name" android:src="@drawable/sync_operator" /> --> <EditText android:drawableLeft="@android:drawable/ic_lock_idle_lock" android:layout_width="fill_parent" android:layout_height="60dp" android:inputType="textPassword" android:ems="10" android:id="@+id/resetpwd_edit_pwd_old" android:hint="请输入您的旧密码" android:layout_below="@+id/resetpwd_edit_name" android:layout_alignRight="@+id/resetpwd_edit_name" android:layout_alignEnd="@+id/resetpwd_edit_name" android:layout_alignLeft="@+id/resetpwd_edit_name" android:layout_alignStart="@+id/resetpwd_edit_name" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="取消" android:id="@+id/resetpwd_btn_cancel" android:textSize="20dp" android:onClick="not_to_reset" android:background="#f71818" android:layout_below="@+id/resetpwd_btn_sure" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="20dp" /> <EditText android:drawableLeft="@android:drawable/ic_lock_idle_lock" android:layout_width="fill_parent" android:layout_height="60dp" android:inputType="textPassword" android:ems="10" android:id="@+id/resetpwd_edit_pwd_new" android:layout_below="@+id/resetpwd_edit_pwd_old" android:layout_centerHorizontal="true" android:hint="请确认您的新密码" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="确定" android:id="@+id/resetpwd_btn_sure" android:textSize="20dp" android:onClick="sure_to_reset" android:background="#1cf718" android:layout_marginTop="92dp" android:layout_below="@+id/resetpwd_edit_pwd_new" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:drawableLeft="@android:drawable/ic_lock_idle_lock" android:layout_width="fill_parent" android:layout_height="60dp" android:inputType="textPassword" android:ems="10" android:id="@+id/resetpwd_edit_pwd_check" android:hint="请输入您的新密码" android:layout_below="@+id/resetpwd_edit_pwd_new" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout>
- <?xml version=“1.0” encoding=“utf-8”?>
- <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
- android:layout_width=”match_parent”
- android:layout_height=”match_parent”
- android:paddingBottom=”@dimen/activity_vertical_margin”
- android:paddingLeft=”@dimen/activity_horizontal_margin”
- android:paddingRight=”@dimen/activity_horizontal_margin”
- android:paddingTop=”@dimen/activity_vertical_margin”>
- <TextView
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:textAppearance=”?android:attr/textAppearanceLarge”
- android:text=”FooilshFan您好,欢迎回来!”
- android:id=”@+id/textView”
- android:layout_centerHorizontal=”true”
- android:layout_marginLeft=”50dp”
- android:layout_marginTop=”6dp”
- android:textSize=”16dp” />
- <Button
- android:layout_width=”wrap_content”
- android:layout_height=”wrap_content”
- android:text=”退出”
- android:id=”@+id/returnback”
- android:layout_below=”@+id/textView”
- android:layout_marginTop=”36dp”
- android:onClick=”back_to_login”
- android:textColor=”#ffffff”
- android:textSize=”20dp”
- android:background=”#d95b5b”
- android:layout_alignParentLeft=”true”
- android:layout_alignParentStart=”true”
- android:layout_alignParentRight=”true”
- android:layout_alignParentEnd=”true” />
- </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="FooilshFan您好,欢迎回来!" android:id="@+id/textView" android:layout_centerHorizontal="true" android:layout_marginLeft="50dp" android:layout_marginTop="6dp" android:textSize="16dp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="退出" android:id="@+id/returnback" android:layout_below="@+id/textView" android:layout_marginTop="36dp" android:onClick="back_to_login" android:textColor="#ffffff" android:textSize="20dp" android:background="#d95b5b" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout>
2:用户数据管理的类
UserData.java 【用户数据】- package com.example.foolishfan.user_v10;
- public class UserData {
- private String userName; //用户名
- private String userPwd; //用户密码
- private int userId; //用户ID号
- public int pwdresetFlag=0;
- //获取用户名
- public String getUserName() { //获取用户名
- return userName;
- }
- //设置用户名
- public void setUserName(String userName) { //输入用户名
- this.userName = userName;
- }
- //获取用户密码
- public String getUserPwd() { //获取用户密码
- return userPwd;
- }
- //设置用户密码
- public void setUserPwd(String userPwd) { //输入用户密码
- this.userPwd = userPwd;
- }
- //获取用户id
- public int getUserId() { //获取用户ID号
- return userId;
- }
- //设置用户id
- public void setUserId(int userId) { //设置用户ID号
- this.userId = userId;
- }
- public UserData(String userName, String userPwd) { //这里只采用用户名和密码
- super();
- this.userName = userName;
- this.userPwd = userPwd;
- }
- }
UserDataManager.java【用户管理】package com.example.foolishfan.user_v10; public class UserData { private String userName; //用户名 private String userPwd; //用户密码 private int userId; //用户ID号 public int pwdresetFlag=0; //获取用户名 public String getUserName() { //获取用户名 return userName; } //设置用户名 public void setUserName(String userName) { //输入用户名 this.userName = userName; } //获取用户密码 public String getUserPwd() { //获取用户密码 return userPwd; } //设置用户密码 public void setUserPwd(String userPwd) { //输入用户密码 this.userPwd = userPwd; } //获取用户id public int getUserId() { //获取用户ID号 return userId; } //设置用户id public void setUserId(int userId) { //设置用户ID号 this.userId = userId; } public UserData(String userName, String userPwd) { //这里只采用用户名和密码 super(); this.userName = userName; this.userPwd = userPwd; } }
- package com.example.foolishfan.user_v10;
- import android.content.ContentValues;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.SQLException;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import android.util.Log;
- public class UserDataManager { //用户数据管理类
- //一些宏定义和声明
- private static final String TAG = “UserDataManager”;
- private static final String DB_NAME = “user_data”;
- private static final String TABLE_NAME = “users”;
- public static final String ID = “_id”;
- public static final String USER_NAME = “user_name”;
- public static final String USER_PWD = “user_pwd”;
- // public static final String SILENT = “silent”;
- // public static final String VIBRATE = “vibrate”;
- private static final int DB_VERSION = 2;
- private Context mContext = null;
- //创建用户book表
- private static final String DB_CREATE = “CREATE TABLE ” + TABLE_NAME + “ (“
- + ID + ” integer primary key,” + USER_NAME + “ varchar,”
- + USER_PWD + ” varchar” + “);”;
- private SQLiteDatabase mSQLiteDatabase = null;
- private DataBaseManagementHelper mDatabaseHelper = null;
- //DataBaseManagementHelper继承自SQLiteOpenHelper
- private static class DataBaseManagementHelper extends SQLiteOpenHelper {
- DataBaseManagementHelper(Context context) {
- super(context, DB_NAME, null, DB_VERSION);
- }
- @Override
- public void onCreate(SQLiteDatabase db) {
- Log.i(TAG,”db.getVersion()=”+db.getVersion());
- db.execSQL(”DROP TABLE IF EXISTS ” + TABLE_NAME + “;”);
- db.execSQL(DB_CREATE);
- Log.i(TAG, ”db.execSQL(DB_CREATE)”);
- Log.e(TAG, DB_CREATE);
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- Log.i(TAG, ”DataBaseManagementHelper onUpgrade”);
- onCreate(db);
- }
- }
- public UserDataManager(Context context) {
- mContext = context;
- Log.i(TAG, ”UserDataManager construction!”);
- }
- //打开数据库
- public void openDataBase() throws SQLException {
- mDatabaseHelper = new DataBaseManagementHelper(mContext);
- mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
- }
- //关闭数据库
- public void closeDataBase() throws SQLException {
- mDatabaseHelper.close();
- }
- //添加新用户,即注册
- public long insertUserData(UserData userData) {
- String userName=userData.getUserName();
- String userPwd=userData.getUserPwd();
- ContentValues values = new ContentValues();
- values.put(USER_NAME, userName);
- values.put(USER_PWD, userPwd);
- return mSQLiteDatabase.insert(TABLE_NAME, ID, values);
- }
- //更新用户信息,如修改密码
- public boolean updateUserData(UserData userData) {
- //int id = userData.getUserId();
- String userName = userData.getUserName();
- String userPwd = userData.getUserPwd();
- ContentValues values = new ContentValues();
- values.put(USER_NAME, userName);
- values.put(USER_PWD, userPwd);
- return mSQLiteDatabase.update(TABLE_NAME, values,null, null) > 0;
- //return mSQLiteDatabase.update(TABLE_NAME, values, ID + ”=” + id, null) > 0;
- }
- //
- public Cursor fetchUserData(int id) throws SQLException {
- Cursor mCursor = mSQLiteDatabase.query(false, TABLE_NAME, null, ID
- + ”=” + id, null, null, null, null, null);
- if (mCursor != null) {
- mCursor.moveToFirst();
- }
- return mCursor;
- }
- //
- public Cursor fetchAllUserDatas() {
- return mSQLiteDatabase.query(TABLE_NAME, null, null, null, null, null,
- null);
- }
- //根据id删除用户
- public boolean deleteUserData(int id) {
- return mSQLiteDatabase.delete(TABLE_NAME, ID + “=” + id, null) > 0;
- }
- //根据用户名注销
- public boolean deleteUserDatabyname(String name) {
- return mSQLiteDatabase.delete(TABLE_NAME, USER_NAME + “=” + name, null) > 0;
- }
- //删除所有用户
- public boolean deleteAllUserDatas() {
- return mSQLiteDatabase.delete(TABLE_NAME, null, null) > 0;
- }
- //
- public String getStringByColumnName(String columnName, int id) {
- Cursor mCursor = fetchUserData(id);
- int columnIndex = mCursor.getColumnIndex(columnName);
- String columnValue = mCursor.getString(columnIndex);
- mCursor.close();
- return columnValue;
- }
- //
- public boolean updateUserDataById(String columnName, int id,
- String columnValue) {
- ContentValues values = new ContentValues();
- values.put(columnName, columnValue);
- return mSQLiteDatabase.update(TABLE_NAME, values, ID + “=” + id, null) > 0;
- }
- //根据用户名找用户,可以判断注册时用户名是否已经存在
- public int findUserByName(String userName){
- Log.i(TAG,”findUserByName , userName=”+userName);
- int result=0;
- Cursor mCursor=mSQLiteDatabase.query(TABLE_NAME, null, USER_NAME+“=”+userName, null, null, null, null);
- if(mCursor!=null){
- result=mCursor.getCount();
- mCursor.close();
- Log.i(TAG,”findUserByName , result=”+result);
- }
- return result;
- }
- //根据用户名和密码找用户,用于登录
- public int findUserByNameAndPwd(String userName,String pwd){
- Log.i(TAG,”findUserByNameAndPwd”);
- int result=0;
- Cursor mCursor=mSQLiteDatabase.query(TABLE_NAME, null, USER_NAME+“=”+userName+“ and ”+USER_PWD+“=”+pwd,
- null, null, null, null);
- if(mCursor!=null){
- result=mCursor.getCount();
- mCursor.close();
- Log.i(TAG,”findUserByNameAndPwd , result=”+result);
- }
- return result;
- }
- }
package com.example.foolishfan.user_v10; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class UserDataManager { //用户数据管理类 //一些宏定义和声明 private static final String TAG = "UserDataManager"; private static final String DB_NAME = "user_data"; private static final String TABLE_NAME = "users"; public static final String ID = "_id"; public static final String USER_NAME = "user_name"; public static final String USER_PWD = "user_pwd"; // public static final String SILENT = "silent"; // public static final String VIBRATE = "vibrate"; private static final int DB_VERSION = 2; private Context mContext = null; //创建用户book表 private static final String DB_CREATE = "CREATE TABLE " + TABLE_NAME + " (" + ID + " integer primary key," + USER_NAME + " varchar," + USER_PWD + " varchar" + ");"; private SQLiteDatabase mSQLiteDatabase = null; private DataBaseManagementHelper mDatabaseHelper = null; //DataBaseManagementHelper继承自SQLiteOpenHelper private static class DataBaseManagementHelper extends SQLiteOpenHelper { DataBaseManagementHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { Log.i(TAG,"db.getVersion()="+db.getVersion()); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + ";"); db.execSQL(DB_CREATE); Log.i(TAG, "db.execSQL(DB_CREATE)"); Log.e(TAG, DB_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i(TAG, "DataBaseManagementHelper onUpgrade"); onCreate(db); } } public UserDataManager(Context context) { mContext = context; Log.i(TAG, "UserDataManager construction!"); } //打开数据库 public void openDataBase() throws SQLException { mDatabaseHelper = new DataBaseManagementHelper(mContext); mSQLiteDatabase = mDatabaseHelper.getWritableDatabase(); } //关闭数据库 public void closeDataBase() throws SQLException { mDatabaseHelper.close(); } //添加新用户,即注册 public long insertUserData(UserData userData) { String userName=userData.getUserName(); String userPwd=userData.getUserPwd(); ContentValues values = new ContentValues(); values.put(USER_NAME, userName); values.put(USER_PWD, userPwd); return mSQLiteDatabase.insert(TABLE_NAME, ID, values); } //更新用户信息,如修改密码 public boolean updateUserData(UserData userData) { //int id = userData.getUserId(); String userName = userData.getUserName(); String userPwd = userData.getUserPwd(); ContentValues values = new ContentValues(); values.put(USER_NAME, userName); values.put(USER_PWD, userPwd); return mSQLiteDatabase.update(TABLE_NAME, values,null, null) > 0; //return mSQLiteDatabase.update(TABLE_NAME, values, ID + "=" + id, null) > 0; } // public Cursor fetchUserData(int id) throws SQLException { Cursor mCursor = mSQLiteDatabase.query(false, TABLE_NAME, null, ID + "=" + id, null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } // public Cursor fetchAllUserDatas() { return mSQLiteDatabase.query(TABLE_NAME, null, null, null, null, null, null); } //根据id删除用户 public boolean deleteUserData(int id) { return mSQLiteDatabase.delete(TABLE_NAME, ID + "=" + id, null) > 0; } //根据用户名注销 public boolean deleteUserDatabyname(String name) { return mSQLiteDatabase.delete(TABLE_NAME, USER_NAME + "=" + name, null) > 0; } //删除所有用户 public boolean deleteAllUserDatas() { return mSQLiteDatabase.delete(TABLE_NAME, null, null) > 0; } // public String getStringByColumnName(String columnName, int id) { Cursor mCursor = fetchUserData(id); int columnIndex = mCursor.getColumnIndex(columnName); String columnValue = mCursor.getString(columnIndex); mCursor.close(); return columnValue; } // public boolean updateUserDataById(String columnName, int id, String columnValue) { ContentValues values = new ContentValues(); values.put(columnName, columnValue); return mSQLiteDatabase.update(TABLE_NAME, values, ID + "=" + id, null) > 0; } //根据用户名找用户,可以判断注册时用户名是否已经存在 public int findUserByName(String userName){ Log.i(TAG,"findUserByName , userName="+userName); int result=0; Cursor mCursor=mSQLiteDatabase.query(TABLE_NAME, null, USER_NAME+"="+userName, null, null, null, null); if(mCursor!=null){ result=mCursor.getCount(); mCursor.close(); Log.i(TAG,"findUserByName , result="+result); } return result; } //根据用户名和密码找用户,用于登录 public int findUserByNameAndPwd(String userName,String pwd){ Log.i(TAG,"findUserByNameAndPwd"); int result=0; Cursor mCursor=mSQLiteDatabase.query(TABLE_NAME, null, USER_NAME+"="+userName+" and "+USER_PWD+"="+pwd, null, null, null, null); if(mCursor!=null){ result=mCursor.getCount(); mCursor.close(); Log.i(TAG,"findUserByNameAndPwd , result="+result); } return result; } }
3:具体操作的实现代码,即各个activity
Login.java【用户登录activity】- package com.example.foolishfan.user_v10;
- import android.app.Activity;
- import android.content.Intent;
- import android.content.SharedPreferences;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.CheckBox;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.TextView;
- import android.widget.Toast;
- public class Login extends Activity { //登录界面活动
- public int pwdresetFlag=0;
- private EditText mAccount; //用户名编辑
- private EditText mPwd; //密码编辑
- private Button mRegisterButton; //注册按钮
- private Button mLoginButton; //登录按钮
- private Button mCancleButton; //注销按钮
- private CheckBox mRememberCheck;
- private SharedPreferences login_sp;
- private String userNameValue,passwordValue;
- private View loginView; //登录
- private View loginSuccessView;
- private TextView loginSuccessShow;
- private TextView mChangepwdText;
- private UserDataManager mUserDataManager; //用户数据管理类
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.login);
- //通过id找到相应的控件
- mAccount = (EditText) findViewById(R.id.login_edit_account);
- mPwd = (EditText) findViewById(R.id.login_edit_pwd);
- mRegisterButton = (Button) findViewById(R.id.login_btn_register);
- mLoginButton = (Button) findViewById(R.id.login_btn_login);
- mCancleButton = (Button) findViewById(R.id.login_btn_cancle);
- loginView=findViewById(R.id.login_view);
- loginSuccessView=findViewById(R.id.login_success_view);
- loginSuccessShow=(TextView) findViewById(R.id.login_success_show);
- mChangepwdText = (TextView) findViewById(R.id.login_text_change_pwd);
- mRememberCheck = (CheckBox) findViewById(R.id.Login_Remember);
- login_sp = getSharedPreferences(”userInfo”, 0);
- String name=login_sp.getString(”USER_NAME”, “”);
- String pwd =login_sp.getString(”PASSWORD”, “”);
- boolean choseRemember =login_sp.getBoolean(“mRememberCheck”, false);
- boolean choseAutoLogin =login_sp.getBoolean(“mAutologinCheck”, false);
- //如果上次选了记住密码,那进入登录页面也自动勾选记住密码,并填上用户名和密码
- if(choseRemember){
- mAccount.setText(name);
- mPwd.setText(pwd);
- mRememberCheck.setChecked(true);
- }
- mRegisterButton.setOnClickListener(mListener); //采用OnClickListener方法设置不同按钮按下之后的监听事件
- mLoginButton.setOnClickListener(mListener);
- mCancleButton.setOnClickListener(mListener);
- mChangepwdText.setOnClickListener(mListener);
- ImageView image = (ImageView) findViewById(R.id.logo); //使用ImageView显示logo
- image.setImageResource(R.drawable.logo);
- if (mUserDataManager == null) {
- mUserDataManager = new UserDataManager(this);
- mUserDataManager.openDataBase(); //建立本地数据库
- }
- }
- OnClickListener mListener = new OnClickListener() { //不同按钮按下的监听事件选择
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.login_btn_register: //登录界面的注册按钮
- Intent intent_Login_to_Register = new Intent(Login.this,Register.class) ; //切换Login Activity至User Activity
- startActivity(intent_Login_to_Register);
- finish();
- break;
- case R.id.login_btn_login: //登录界面的登录按钮
- login();
- break;
- case R.id.login_btn_cancle: //登录界面的注销按钮
- cancel();
- break;
- case R.id.login_text_change_pwd: //登录界面的注销按钮
- Intent intent_Login_to_reset = new Intent(Login.this,Resetpwd.class) ; //切换Login Activity至User Activity
- startActivity(intent_Login_to_reset);
- finish();
- break;
- }
- }
- };
- public void login() { //登录按钮监听事件
- if (isUserNameAndPwdValid()) {
- String userName = mAccount.getText().toString().trim(); //获取当前输入的用户名和密码信息
- String userPwd = mPwd.getText().toString().trim();
- SharedPreferences.Editor editor =login_sp.edit();
- int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd);
- if(result==1){ //返回1说明用户名和密码均正确
- //保存用户名和密码
- editor.putString(”USER_NAME”, userName);
- editor.putString(”PASSWORD”, userPwd);
- //是否记住密码
- if(mRememberCheck.isChecked()){
- editor.putBoolean(”mRememberCheck”, true);
- }else{
- editor.putBoolean(”mRememberCheck”, false);
- }
- editor.commit();
- Intent intent = new Intent(Login.this,User.class) ; //切换Login Activity至User Activity
- startActivity(intent);
- finish();
- Toast.makeText(this, getString(R.string.login_success),Toast.LENGTH_SHORT).show();//登录成功提示
- }else if(result==0){
- Toast.makeText(this, getString(R.string.login_fail),Toast.LENGTH_SHORT).show(); //登录失败提示
- }
- }
- }
- public void cancel() { //注销
- if (isUserNameAndPwdValid()) {
- String userName = mAccount.getText().toString().trim(); //获取当前输入的用户名和密码信息
- String userPwd = mPwd.getText().toString().trim();
- int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd);
- if(result==1){ //返回1说明用户名和密码均正确
- Toast.makeText(this, getString(R.string.cancel_success),Toast.LENGTH_SHORT).show();<span style=“font-family: Arial;”>//注销成功提示</span>
- mPwd.setText(”“);
- mAccount.setText(”“);
- mUserDataManager.deleteUserDatabyname(userName);
- }else if(result==0){
- Toast.makeText(this, getString(R.string.cancel_fail),Toast.LENGTH_SHORT).show(); //注销失败提示
- }
- }
- }
- public boolean isUserNameAndPwdValid() {
- if (mAccount.getText().toString().trim().equals(“”)) {
- Toast.makeText(this, getString(R.string.account_empty),
- Toast.LENGTH_SHORT).show();
- return false;
- } else if (mPwd.getText().toString().trim().equals(“”)) {
- Toast.makeText(this, getString(R.string.pwd_empty),
- Toast.LENGTH_SHORT).show();
- return false;
- }
- return true;
- }
- @Override
- protected void onResume() {
- if (mUserDataManager == null) {
- mUserDataManager = new UserDataManager(this);
- mUserDataManager.openDataBase();
- }
- super.onResume();
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- }
- @Override
- protected void onPause() {
- if (mUserDataManager != null) {
- mUserDataManager.closeDataBase();
- mUserDataManager = null;
- }
- super.onPause();
- }
- }
Register.java【用户注册activity】package com.example.foolishfan.user_v10; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class Login extends Activity { //登录界面活动 public int pwdresetFlag=0; private EditText mAccount; //用户名编辑 private EditText mPwd; //密码编辑 private Button mRegisterButton; //注册按钮 private Button mLoginButton; //登录按钮 private Button mCancleButton; //注销按钮 private CheckBox mRememberCheck; private SharedPreferences login_sp; private String userNameValue,passwordValue; private View loginView; //登录 private View loginSuccessView; private TextView loginSuccessShow; private TextView mChangepwdText; private UserDataManager mUserDataManager; //用户数据管理类 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); //通过id找到相应的控件 mAccount = (EditText) findViewById(R.id.login_edit_account); mPwd = (EditText) findViewById(R.id.login_edit_pwd); mRegisterButton = (Button) findViewById(R.id.login_btn_register); mLoginButton = (Button) findViewById(R.id.login_btn_login); mCancleButton = (Button) findViewById(R.id.login_btn_cancle); loginView=findViewById(R.id.login_view); loginSuccessView=findViewById(R.id.login_success_view); loginSuccessShow=(TextView) findViewById(R.id.login_success_show); mChangepwdText = (TextView) findViewById(R.id.login_text_change_pwd); mRememberCheck = (CheckBox) findViewById(R.id.Login_Remember); login_sp = getSharedPreferences("userInfo", 0); String name=login_sp.getString("USER_NAME", ""); String pwd =login_sp.getString("PASSWORD", ""); boolean choseRemember =login_sp.getBoolean("mRememberCheck", false); boolean choseAutoLogin =login_sp.getBoolean("mAutologinCheck", false); //如果上次选了记住密码,那进入登录页面也自动勾选记住密码,并填上用户名和密码 if(choseRemember){ mAccount.setText(name); mPwd.setText(pwd); mRememberCheck.setChecked(true); } mRegisterButton.setOnClickListener(mListener); //采用OnClickListener方法设置不同按钮按下之后的监听事件 mLoginButton.setOnClickListener(mListener); mCancleButton.setOnClickListener(mListener); mChangepwdText.setOnClickListener(mListener); ImageView image = (ImageView) findViewById(R.id.logo); //使用ImageView显示logo image.setImageResource(R.drawable.logo); if (mUserDataManager == null) { mUserDataManager = new UserDataManager(this); mUserDataManager.openDataBase(); //建立本地数据库 } } OnClickListener mListener = new OnClickListener() { //不同按钮按下的监听事件选择 public void onClick(View v) { switch (v.getId()) { case R.id.login_btn_register: //登录界面的注册按钮 Intent intent_Login_to_Register = new Intent(Login.this,Register.class) ; //切换Login Activity至User Activity startActivity(intent_Login_to_Register); finish(); break; case R.id.login_btn_login: //登录界面的登录按钮 login(); break; case R.id.login_btn_cancle: //登录界面的注销按钮 cancel(); break; case R.id.login_text_change_pwd: //登录界面的注销按钮 Intent intent_Login_to_reset = new Intent(Login.this,Resetpwd.class) ; //切换Login Activity至User Activity startActivity(intent_Login_to_reset); finish(); break; } } }; public void login() { //登录按钮监听事件 if (isUserNameAndPwdValid()) { String userName = mAccount.getText().toString().trim(); //获取当前输入的用户名和密码信息 String userPwd = mPwd.getText().toString().trim(); SharedPreferences.Editor editor =login_sp.edit(); int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd); if(result==1){ //返回1说明用户名和密码均正确 //保存用户名和密码 editor.putString("USER_NAME", userName); editor.putString("PASSWORD", userPwd); //是否记住密码 if(mRememberCheck.isChecked()){ editor.putBoolean("mRememberCheck", true); }else{ editor.putBoolean("mRememberCheck", false); } editor.commit(); Intent intent = new Intent(Login.this,User.class) ; //切换Login Activity至User Activity startActivity(intent); finish(); Toast.makeText(this, getString(R.string.login_success),Toast.LENGTH_SHORT).show();//登录成功提示 }else if(result==0){ Toast.makeText(this, getString(R.string.login_fail),Toast.LENGTH_SHORT).show(); //登录失败提示 } } } public void cancel() { //注销 if (isUserNameAndPwdValid()) { String userName = mAccount.getText().toString().trim(); //获取当前输入的用户名和密码信息 String userPwd = mPwd.getText().toString().trim(); int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd); if(result==1){ //返回1说明用户名和密码均正确 Toast.makeText(this, getString(R.string.cancel_success),Toast.LENGTH_SHORT).show();<span style="font-family: Arial;">//注销成功提示</span> mPwd.setText(""); mAccount.setText(""); mUserDataManager.deleteUserDatabyname(userName); }else if(result==0){ Toast.makeText(this, getString(R.string.cancel_fail),Toast.LENGTH_SHORT).show(); //注销失败提示 } } } public boolean isUserNameAndPwdValid() { if (mAccount.getText().toString().trim().equals("")) { Toast.makeText(this, getString(R.string.account_empty), Toast.LENGTH_SHORT).show(); return false; } else if (mPwd.getText().toString().trim().equals("")) { Toast.makeText(this, getString(R.string.pwd_empty), Toast.LENGTH_SHORT).show(); return false; } return true; } @Override protected void onResume() { if (mUserDataManager == null) { mUserDataManager = new UserDataManager(this); mUserDataManager.openDataBase(); } super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onPause() { if (mUserDataManager != null) { mUserDataManager.closeDataBase(); mUserDataManager = null; } super.onPause(); } }
- package com.example.foolishfan.user_v10;
- import android.app.Activity;
- import android.content.Intent;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- public class Register extends AppCompatActivity {
- private EditText mAccount; //用户名编辑
- private EditText mPwd; //密码编辑
- private EditText mPwdCheck; //密码编辑
- private Button mSureButton; //确定按钮
- private Button mCancelButton; //取消按钮
- private UserDataManager mUserDataManager; //用户数据管理类
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.register);
- mAccount = (EditText) findViewById(R.id.resetpwd_edit_name);
- mPwd = (EditText) findViewById(R.id.resetpwd_edit_pwd_old);
- mPwdCheck = (EditText) findViewById(R.id.resetpwd_edit_pwd_new);
- mSureButton = (Button) findViewById(R.id.register_btn_sure);
- mCancelButton = (Button) findViewById(R.id.register_btn_cancel);
- mSureButton.setOnClickListener(m_register_Listener); //注册界面两个按钮的监听事件
- mCancelButton.setOnClickListener(m_register_Listener);
- if (mUserDataManager == null) {
- mUserDataManager = new UserDataManager(this);
- mUserDataManager.openDataBase(); //建立本地数据库
- }
- }
- View.OnClickListener m_register_Listener = new View.OnClickListener() { //不同按钮按下的监听事件选择
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.register_btn_sure: //确认按钮的监听事件
- register_check();
- break;
- case R.id.register_btn_cancel: //取消按钮的监听事件,由注册界面返回登录界面
- Intent intent_Register_to_Login = new Intent(Register.this,Login.class) ; //切换User Activity至Login Activity
- startActivity(intent_Register_to_Login);
- finish();
- break;
- }
- }
- };
- public void register_check() { //确认按钮的监听事件
- if (isUserNameAndPwdValid()) {
- String userName = mAccount.getText().toString().trim();
- String userPwd = mPwd.getText().toString().trim();
- String userPwdCheck = mPwdCheck.getText().toString().trim();
- //检查用户是否存在
- int count=mUserDataManager.findUserByName(userName);
- //用户已经存在时返回,给出提示文字
- if(count>0){
- Toast.makeText(this, getString(R.string.name_already_exist, userName),Toast.LENGTH_SHORT).show();
- return ;
- }
- if(userPwd.equals(userPwdCheck)==false){ //两次密码输入不一样
- Toast.makeText(this, getString(R.string.pwd_not_the_same),Toast.LENGTH_SHORT).show();
- return ;
- } else {
- UserData mUser = new UserData(userName, userPwd);
- mUserDataManager.openDataBase();
- long flag = mUserDataManager.insertUserData(mUser); //新建用户信息
- if (flag == -1) {
- Toast.makeText(this, getString(R.string.register_fail),Toast.LENGTH_SHORT).show();
- }else{
- Toast.makeText(this, getString(R.string.register_success),Toast.LENGTH_SHORT).show();
- Intent intent_Register_to_Login = new Intent(Register.this,Login.class) ; //切换User Activity至Login Activity
- startActivity(intent_Register_to_Login);
- finish();
- }
- }
- }
- }
- public boolean isUserNameAndPwdValid() {
- if (mAccount.getText().toString().trim().equals(“”)) {
- Toast.makeText(this, getString(R.string.account_empty),
- Toast.LENGTH_SHORT).show();
- return false;
- } else if (mPwd.getText().toString().trim().equals(“”)) {
- Toast.makeText(this, getString(R.string.pwd_empty),
- Toast.LENGTH_SHORT).show();
- return false;
- }else if(mPwdCheck.getText().toString().trim().equals(“”)) {
- Toast.makeText(this, getString(R.string.pwd_check_empty),
- Toast.LENGTH_SHORT).show();
- return false;
- }
- return true;
- }
- }
Resetpwd.java【重新设置密码】package com.example.foolishfan.user_v10; import android.app.Activity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Register extends AppCompatActivity { private EditText mAccount; //用户名编辑 private EditText mPwd; //密码编辑 private EditText mPwdCheck; //密码编辑 private Button mSureButton; //确定按钮 private Button mCancelButton; //取消按钮 private UserDataManager mUserDataManager; //用户数据管理类 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.register); mAccount = (EditText) findViewById(R.id.resetpwd_edit_name); mPwd = (EditText) findViewById(R.id.resetpwd_edit_pwd_old); mPwdCheck = (EditText) findViewById(R.id.resetpwd_edit_pwd_new); mSureButton = (Button) findViewById(R.id.register_btn_sure); mCancelButton = (Button) findViewById(R.id.register_btn_cancel); mSureButton.setOnClickListener(m_register_Listener); //注册界面两个按钮的监听事件 mCancelButton.setOnClickListener(m_register_Listener); if (mUserDataManager == null) { mUserDataManager = new UserDataManager(this); mUserDataManager.openDataBase(); //建立本地数据库 } } View.OnClickListener m_register_Listener = new View.OnClickListener() { //不同按钮按下的监听事件选择 public void onClick(View v) { switch (v.getId()) { case R.id.register_btn_sure: //确认按钮的监听事件 register_check(); break; case R.id.register_btn_cancel: //取消按钮的监听事件,由注册界面返回登录界面 Intent intent_Register_to_Login = new Intent(Register.this,Login.class) ; //切换User Activity至Login Activity startActivity(intent_Register_to_Login); finish(); break; } } }; public void register_check() { //确认按钮的监听事件 if (isUserNameAndPwdValid()) { String userName = mAccount.getText().toString().trim(); String userPwd = mPwd.getText().toString().trim(); String userPwdCheck = mPwdCheck.getText().toString().trim(); //检查用户是否存在 int count=mUserDataManager.findUserByName(userName); //用户已经存在时返回,给出提示文字 if(count>0){ Toast.makeText(this, getString(R.string.name_already_exist, userName),Toast.LENGTH_SHORT).show(); return ; } if(userPwd.equals(userPwdCheck)==false){ //两次密码输入不一样 Toast.makeText(this, getString(R.string.pwd_not_the_same),Toast.LENGTH_SHORT).show(); return ; } else { UserData mUser = new UserData(userName, userPwd); mUserDataManager.openDataBase(); long flag = mUserDataManager.insertUserData(mUser); //新建用户信息 if (flag == -1) { Toast.makeText(this, getString(R.string.register_fail),Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this, getString(R.string.register_success),Toast.LENGTH_SHORT).show(); Intent intent_Register_to_Login = new Intent(Register.this,Login.class) ; //切换User Activity至Login Activity startActivity(intent_Register_to_Login); finish(); } } } } public boolean isUserNameAndPwdValid() { if (mAccount.getText().toString().trim().equals("")) { Toast.makeText(this, getString(R.string.account_empty), Toast.LENGTH_SHORT).show(); return false; } else if (mPwd.getText().toString().trim().equals("")) { Toast.makeText(this, getString(R.string.pwd_empty), Toast.LENGTH_SHORT).show(); return false; }else if(mPwdCheck.getText().toString().trim().equals("")) { Toast.makeText(this, getString(R.string.pwd_check_empty), Toast.LENGTH_SHORT).show(); return false; } return true; } }
- package com.example.foolishfan.user_v10;
- import android.app.Activity;
- import android.content.Intent;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.RelativeLayout;
- import android.widget.Toast;
- public class Resetpwd extends AppCompatActivity {
- private EditText mAccount; //用户名编辑
- private EditText mPwd_old; //密码编辑
- private EditText mPwd_new; //密码编辑
- private EditText mPwdCheck; //密码编辑
- private Button mSureButton; //确定按钮
- private Button mCancelButton; //取消按钮
- private UserDataManager mUserDataManager; //用户数据管理类
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.resetpwd);
- mAccount = (EditText) findViewById(R.id.resetpwd_edit_name);
- mPwd_old = (EditText) findViewById(R.id.resetpwd_edit_pwd_old);
- mPwd_new = (EditText) findViewById(R.id.resetpwd_edit_pwd_new);
- mPwdCheck = (EditText) findViewById(R.id.resetpwd_edit_pwd_check);
- mSureButton = (Button) findViewById(R.id.resetpwd_btn_sure);
- mCancelButton = (Button) findViewById(R.id.resetpwd_btn_cancel);
- mSureButton.setOnClickListener(m_resetpwd_Listener); //注册界面两个按钮的监听事件
- mCancelButton.setOnClickListener(m_resetpwd_Listener);
- if (mUserDataManager == null) {
- mUserDataManager = new UserDataManager(this);
- mUserDataManager.openDataBase(); //建立本地数据库
- }
- }
- View.OnClickListener m_resetpwd_Listener = new View.OnClickListener() { //不同按钮按下的监听事件选择
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.resetpwd_btn_sure: //确认按钮的监听事件
- resetpwd_check();
- break;
- case R.id.resetpwd_btn_cancel: //取消按钮的监听事件,由注册界面返回登录界面
- Intent intent_Resetpwd_to_Login = new Intent(Resetpwd.this,Login.class) ; //切换Resetpwd Activity至Login Activity
- startActivity(intent_Resetpwd_to_Login);
- finish();
- break;
- }
- }
- };
- public void resetpwd_check() { //确认按钮的监听事件
- if (isUserNameAndPwdValid()) {
- String userName = mAccount.getText().toString().trim();
- String userPwd_old = mPwd_old.getText().toString().trim();
- String userPwd_new = mPwd_new.getText().toString().trim();
- String userPwdCheck = mPwdCheck.getText().toString().trim();
- int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd_old);
- if(result==1){ //返回1说明用户名和密码均正确,继续后续操作
- if(userPwd_new.equals(userPwdCheck)==false){ //两次密码输入不一样
- Toast.makeText(this, getString(R.string.pwd_not_the_same),Toast.LENGTH_SHORT).show();
- return ;
- } else {
- UserData mUser = new UserData(userName, userPwd_new);
- mUserDataManager.openDataBase();
- boolean flag = mUserDataManager.updateUserData(mUser);
- if (flag == false) {
- Toast.makeText(this, getString(R.string.resetpwd_fail),Toast.LENGTH_SHORT).show();
- }else{
- Toast.makeText(this, getString(R.string.resetpwd_success),Toast.LENGTH_SHORT).show();
- mUser.pwdresetFlag=1;
- Intent intent_Register_to_Login = new Intent(Resetpwd.this,Login.class) ; //切换User Activity至Login Activity
- startActivity(intent_Register_to_Login);
- finish();
- }
- }
- }else if(result==0){ //返回0说明用户名和密码不匹配,重新输入
- Toast.makeText(this, getString(R.string.pwd_not_fit_user),Toast.LENGTH_SHORT).show();
- return;
- }
- }
- }
- public boolean isUserNameAndPwdValid() {
- String userName = mAccount.getText().toString().trim();
- //检查用户是否存在
- int count=mUserDataManager.findUserByName(userName);
- //用户不存在时返回,给出提示文字
- if(count<=0){
- Toast.makeText(this, getString(R.string.name_not_exist, userName),Toast.LENGTH_SHORT).show();
- return false;
- }
- if (mAccount.getText().toString().trim().equals(“”)) {
- Toast.makeText(this, getString(R.string.account_empty),Toast.LENGTH_SHORT).show();
- return false;
- } else if (mPwd_old.getText().toString().trim().equals(“”)) {
- Toast.makeText(this, getString(R.string.pwd_empty),Toast.LENGTH_SHORT).show();
- return false;
- } else if (mPwd_new.getText().toString().trim().equals(“”)) {
- Toast.makeText(this, getString(R.string.pwd_new_empty),Toast.LENGTH_SHORT).show();
- return false;
- }else if(mPwdCheck.getText().toString().trim().equals(“”)) {
- Toast.makeText(this, getString(R.string.pwd_check_empty),Toast.LENGTH_SHORT).show();
- return false;
- }
- return true;
- }
- }
User.java【用户个人中心】package com.example.foolishfan.user_v10; import android.app.Activity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.Toast; public class Resetpwd extends AppCompatActivity { private EditText mAccount; //用户名编辑 private EditText mPwd_old; //密码编辑 private EditText mPwd_new; //密码编辑 private EditText mPwdCheck; //密码编辑 private Button mSureButton; //确定按钮 private Button mCancelButton; //取消按钮 private UserDataManager mUserDataManager; //用户数据管理类 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.resetpwd); mAccount = (EditText) findViewById(R.id.resetpwd_edit_name); mPwd_old = (EditText) findViewById(R.id.resetpwd_edit_pwd_old); mPwd_new = (EditText) findViewById(R.id.resetpwd_edit_pwd_new); mPwdCheck = (EditText) findViewById(R.id.resetpwd_edit_pwd_check); mSureButton = (Button) findViewById(R.id.resetpwd_btn_sure); mCancelButton = (Button) findViewById(R.id.resetpwd_btn_cancel); mSureButton.setOnClickListener(m_resetpwd_Listener); //注册界面两个按钮的监听事件 mCancelButton.setOnClickListener(m_resetpwd_Listener); if (mUserDataManager == null) { mUserDataManager = new UserDataManager(this); mUserDataManager.openDataBase(); //建立本地数据库 } } View.OnClickListener m_resetpwd_Listener = new View.OnClickListener() { //不同按钮按下的监听事件选择 public void onClick(View v) { switch (v.getId()) { case R.id.resetpwd_btn_sure: //确认按钮的监听事件 resetpwd_check(); break; case R.id.resetpwd_btn_cancel: //取消按钮的监听事件,由注册界面返回登录界面 Intent intent_Resetpwd_to_Login = new Intent(Resetpwd.this,Login.class) ; //切换Resetpwd Activity至Login Activity startActivity(intent_Resetpwd_to_Login); finish(); break; } } }; public void resetpwd_check() { //确认按钮的监听事件 if (isUserNameAndPwdValid()) { String userName = mAccount.getText().toString().trim(); String userPwd_old = mPwd_old.getText().toString().trim(); String userPwd_new = mPwd_new.getText().toString().trim(); String userPwdCheck = mPwdCheck.getText().toString().trim(); int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd_old); if(result==1){ //返回1说明用户名和密码均正确,继续后续操作 if(userPwd_new.equals(userPwdCheck)==false){ //两次密码输入不一样 Toast.makeText(this, getString(R.string.pwd_not_the_same),Toast.LENGTH_SHORT).show(); return ; } else { UserData mUser = new UserData(userName, userPwd_new); mUserDataManager.openDataBase(); boolean flag = mUserDataManager.updateUserData(mUser); if (flag == false) { Toast.makeText(this, getString(R.string.resetpwd_fail),Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this, getString(R.string.resetpwd_success),Toast.LENGTH_SHORT).show(); mUser.pwdresetFlag=1; Intent intent_Register_to_Login = new Intent(Resetpwd.this,Login.class) ; //切换User Activity至Login Activity startActivity(intent_Register_to_Login); finish(); } } }else if(result==0){ //返回0说明用户名和密码不匹配,重新输入 Toast.makeText(this, getString(R.string.pwd_not_fit_user),Toast.LENGTH_SHORT).show(); return; } } } public boolean isUserNameAndPwdValid() { String userName = mAccount.getText().toString().trim(); //检查用户是否存在 int count=mUserDataManager.findUserByName(userName); //用户不存在时返回,给出提示文字 if(count<=0){ Toast.makeText(this, getString(R.string.name_not_exist, userName),Toast.LENGTH_SHORT).show(); return false; } if (mAccount.getText().toString().trim().equals("")) { Toast.makeText(this, getString(R.string.account_empty),Toast.LENGTH_SHORT).show(); return false; } else if (mPwd_old.getText().toString().trim().equals("")) { Toast.makeText(this, getString(R.string.pwd_empty),Toast.LENGTH_SHORT).show(); return false; } else if (mPwd_new.getText().toString().trim().equals("")) { Toast.makeText(this, getString(R.string.pwd_new_empty),Toast.LENGTH_SHORT).show(); return false; }else if(mPwdCheck.getText().toString().trim().equals("")) { Toast.makeText(this, getString(R.string.pwd_check_empty),Toast.LENGTH_SHORT).show(); return false; } return true; } }
- package com.example.foolishfan.user_v10;
- import android.content.Intent;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- public class User extends AppCompatActivity {
- private Button mReturnButton;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.user);
- mReturnButton = (Button)findViewById(R.id.returnback);
- }
- public void back_to_login(View view) {
- Intent intent3 = new Intent(User.this,Login.class) ;
- startActivity(intent3);
- finish();
- }
- }
package com.example.foolishfan.user_v10; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class User extends AppCompatActivity { private Button mReturnButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.user); mReturnButton = (Button)findViewById(R.id.returnback); } public void back_to_login(View view) { Intent intent3 = new Intent(User.this,Login.class) ; startActivity(intent3); finish(); } }
二、功能分析
上面工程涉及到的这些内容,在网上有很多写的很有参考价值的资料,建议可单独熟悉各个部分内容,然后添加功能到已有代码基础上,由于好多天后才整理的博客,缺少很多刚学习时遇到的种种错误及其解决方法,细节之处还望多交流。
<1>:Button,TextView,TextEdit,ImageView,RatioButton等基本控件的使用
<2>:多个Activities之间的切换
<3>:使用Android本地数据库来管理用户信息1:登录功能
通过登录按钮的监听事件实现登录,登录过程中需要判断用户名是否存在,密码是否正确,核心函数:- public void login() { //登录按钮监听事件
- if (isUserNameAndPwdValid()) {
- String userName = mAccount.getText().toString().trim();//获取当前输入的用户名和密码信息
- String userPwd = mPwd.getText().toString().trim();
- SharedPreferences.Editor editor =login_sp.edit();
- int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd);
- if(result==1){ //返回1说明用户名和密码均正确
- //保存用户名和密码
- editor.putString(”USER_NAME”, userName);
- editor.putString(”PASSWORD”, userPwd);
- //是否记住密码
- if(mRememberCheck.isChecked()){
- editor.putBoolean(”mRememberCheck”, true);
- }else{
- editor.putBoolean(”mRememberCheck”, false);
- }
- editor.commit();
- Intent intent = new Intent(Login.this,User.class) ;
- startActivity(intent);
- finish();
- Toast.makeText(this, getString(R.string.login_success),Toast.LENGTH_SHORT).show();//登录成功提示
- }else if(result==0){
- Toast.makeText(this, getString(R.string.login_fail),Toast.LENGTH_SHORT).show(); //登录失败提示
- }
- }
- }
public void login() { //登录按钮监听事件 if (isUserNameAndPwdValid()) { String userName = mAccount.getText().toString().trim();//获取当前输入的用户名和密码信息 String userPwd = mPwd.getText().toString().trim(); SharedPreferences.Editor editor =login_sp.edit(); int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd); if(result==1){ //返回1说明用户名和密码均正确 //保存用户名和密码 editor.putString("USER_NAME", userName); editor.putString("PASSWORD", userPwd); //是否记住密码 if(mRememberCheck.isChecked()){ editor.putBoolean("mRememberCheck", true); }else{ editor.putBoolean("mRememberCheck", false); } editor.commit(); Intent intent = new Intent(Login.this,User.class) ; startActivity(intent); finish(); Toast.makeText(this, getString(R.string.login_success),Toast.LENGTH_SHORT).show();//登录成功提示 }else if(result==0){ Toast.makeText(this, getString(R.string.login_fail),Toast.LENGTH_SHORT).show(); //登录失败提示 } } }
2:注册功能
登录界面上点击注册按钮,进入对应监听事件,直接实现从Login的Activity到Register的Activity的跳转,然后在Register的Activity上实现用户注册,核心函数:
- public void register_check() { //确认按钮的监听事件
- if (isUserNameAndPwdValid()) {
- String userName = mAccount.getText().toString().trim();
- String userPwd = mPwd.getText().toString().trim();
- String userPwdCheck = mPwdCheck.getText().toString().trim();
- //检查用户是否存在
- int count=mUserDataManager.findUserByName(userName);
- //用户已经存在时返回,给出提示文字
- if(count>0){
- Toast.makeText(this, getString(R.string.name_already_exist, userName),Toast.LENGTH_SHORT).show();
- return ;
- }
- if(userPwd.equals(userPwdCheck)==false){ //两次密码输入不一样
- Toast.makeText(this, getString(R.string.pwd_not_the_same),Toast.LENGTH_SHORT).show();
- return ;
- } else {
- UserData mUser = new UserData(userName, userPwd);
- mUserDataManager.openDataBase();
- long flag = mUserDataManager.insertUserData(mUser); //新建用户信息
- if (flag == -1) {
- Toast.makeText(this, getString(R.string.register_fail),Toast.LENGTH_SHORT).show();
- }else{
- Toast.makeText(this, getString(R.string.register_success),Toast.LENGTH_SHORT).show();
- Intent intent_Register_to_Login = new Intent(Register.this,Login.class) ;
- startActivity(intent_Register_to_Login);
- finish();
- }
- }
- }
- }
public void register_check() { //确认按钮的监听事件 if (isUserNameAndPwdValid()) { String userName = mAccount.getText().toString().trim(); String userPwd = mPwd.getText().toString().trim(); String userPwdCheck = mPwdCheck.getText().toString().trim(); //检查用户是否存在 int count=mUserDataManager.findUserByName(userName); //用户已经存在时返回,给出提示文字 if(count>0){ Toast.makeText(this, getString(R.string.name_already_exist, userName),Toast.LENGTH_SHORT).show(); return ; } if(userPwd.equals(userPwdCheck)==false){ //两次密码输入不一样 Toast.makeText(this, getString(R.string.pwd_not_the_same),Toast.LENGTH_SHORT).show(); return ; } else { UserData mUser = new UserData(userName, userPwd); mUserDataManager.openDataBase(); long flag = mUserDataManager.insertUserData(mUser); //新建用户信息 if (flag == -1) { Toast.makeText(this, getString(R.string.register_fail),Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this, getString(R.string.register_success),Toast.LENGTH_SHORT).show(); Intent intent_Register_to_Login = new Intent(Register.this,Login.class) ; startActivity(intent_Register_to_Login); finish(); } } } }
3:修改密码功能
在登录界面点击“修改密码”即可进入对应的Resetpwd的Activity,实现用户密码的修改,核心函数:
- public void resetpwd_check() { //确认按钮的监听事件
- if (isUserNameAndPwdValid()) {
- String userName = mAccount.getText().toString().trim();
- String userPwd_old = mPwd_old.getText().toString().trim();
- String userPwd_new = mPwd_new.getText().toString().trim();
- String userPwdCheck = mPwdCheck.getText().toString().trim();
- int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd_old);
- if(result==1){ //返回1说明用户名和密码均正确,继续后续操作
- if(userPwd_new.equals(userPwdCheck)==false){ //两次密码输入不一样
- Toast.makeText(this, getString(R.string.pwd_not_the_same),Toast.LENGTH_SHORT).show();
- return ;
- } else {
- UserData mUser = new UserData(userName, userPwd_new);
- mUserDataManager.openDataBase();
- boolean flag = mUserDataManager.updateUserData(mUser);
- if (flag == false) {
- Toast.makeText(this, getString(R.string.resetpwd_fail),Toast.LENGTH_SHORT).show();
- }else{
- Toast.makeText(this, getString(R.string.resetpwd_success),Toast.LENGTH_SHORT).show();
- mUser.pwdresetFlag=1;
- Intent intent_Register_to_Login = new Intent(Resetpwd.this,Login.class) ;
- startActivity(intent_Register_to_Login);
- finish();
- }
- }
- }else if(result==0){ //返回0说明用户名和密码不匹配,重新输入
- Toast.makeText(this, getString(R.string.pwd_not_fit_user),Toast.LENGTH_SHORT).show();
- return;
- }
- }
- }
public void resetpwd_check() { //确认按钮的监听事件 if (isUserNameAndPwdValid()) { String userName = mAccount.getText().toString().trim(); String userPwd_old = mPwd_old.getText().toString().trim(); String userPwd_new = mPwd_new.getText().toString().trim(); String userPwdCheck = mPwdCheck.getText().toString().trim(); int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd_old); if(result==1){ //返回1说明用户名和密码均正确,继续后续操作 if(userPwd_new.equals(userPwdCheck)==false){ //两次密码输入不一样 Toast.makeText(this, getString(R.string.pwd_not_the_same),Toast.LENGTH_SHORT).show(); return ; } else { UserData mUser = new UserData(userName, userPwd_new); mUserDataManager.openDataBase(); boolean flag = mUserDataManager.updateUserData(mUser); if (flag == false) { Toast.makeText(this, getString(R.string.resetpwd_fail),Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this, getString(R.string.resetpwd_success),Toast.LENGTH_SHORT).show(); mUser.pwdresetFlag=1; Intent intent_Register_to_Login = new Intent(Resetpwd.this,Login.class) ; startActivity(intent_Register_to_Login); finish(); } } }else if(result==0){ //返回0说明用户名和密码不匹配,重新输入 Toast.makeText(this, getString(R.string.pwd_not_fit_user),Toast.LENGTH_SHORT).show(); return; } } }
4:注销功能
注销功能直接在登录界面,当用户名和密码均正确时,点击注销按钮将直接注销用户【各位可根据需求将注销放在个人中心里面进行操作】。核心函数:
- public void cancel() { //注销
- if (isUserNameAndPwdValid()) {
- String userName = mAccount.getText().toString().trim(); //获取当前输入的用户名和密码信息
- String userPwd = mPwd.getText().toString().trim();
- int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd);
- if(result==1){ //返回1说明用户名和密码均正确
- Toast.makeText(this, getString(R.string.cancel_success),Toast.LENGTH_SHORT).show();//登录成功提示
- mPwd.setText(”“);
- mAccount.setText(”“);
- mUserDataManager.deleteUserDatabyname(userName);
- }else if(result==0){
- Toast.makeText(this, getString(R.string.cancel_fail),Toast.LENGTH_SHORT).show(); //登录失败提示
- }
- }
- }
public void cancel() { //注销 if (isUserNameAndPwdValid()) { String userName = mAccount.getText().toString().trim(); //获取当前输入的用户名和密码信息 String userPwd = mPwd.getText().toString().trim(); int result=mUserDataManager.findUserByNameAndPwd(userName, userPwd); if(result==1){ //返回1说明用户名和密码均正确 Toast.makeText(this, getString(R.string.cancel_success),Toast.LENGTH_SHORT).show();//登录成功提示 mPwd.setText(""); mAccount.setText(""); mUserDataManager.deleteUserDatabyname(userName); }else if(result==0){ Toast.makeText(this, getString(R.string.cancel_fail),Toast.LENGTH_SHORT).show(); //登录失败提示 } } }
5:记住密码
当记住密码的RadioButton为真时,系统将记住此时用户登录的信息,用户在下次登录时可避免再次输入用户名和密码的麻烦,实现细节在Login的Activity中。这里给一个大牛用SharedPreferences做的记住密码连接:这里
三、工程源码下载
初学不久,工程代码中可能存在一些bug,望各位不吝指出,有个bug测试出来了,就是在记住密码之后对该账户进行密码修改后返回登录界面,此时记住的密码为原来的密码,不可登陆,我相信这个小bug是难不到你们的,^_^。
转自StayFoolish_Fan的博客:http://blog.csdn.net/StayFoolish_Fan/article/details/51933563?locationNum=7&fps=1
-
登录注册案例
2020-01-03 13:19:23在集合的基础上,我们可以做一个登录注册案例 登陆注册案例分析: 利用面向对象的思想,我们必须先找到能完成某个功能的类,接着调用里面的方法完成它 登陆注册案例中的类: 用户类 成员变量:用户名,密码 成员方法... -
Android登录注册
2017-12-11 14:52:45Android 登录注册页面实现分享学了一段时间的Android开发,通过写博客记录一下学习过程遇到的问题和一些想要分享的东西。页面效果如图所示:整个登录和注册页面都是连接服务器进行操作的,客户端向服务端发出请求,... -
登录注册vue
2019-04-03 15:52:58登录和注册,主要演示如何用axios请求接口以及后期逻辑书写。各个功能如下所示: 登录模块 用户不存在,密码错误,登陆成功 注销登录 注册模块 项目功能梳理 在创建项目之前,我们先理一下整个项目的功能模块。 登录... -
C语言实现登录注册
2019-01-27 09:36:52这是一个用纯C语言和文件操作实现的系统的登录、注册和忘记密码功能。可以用于c语言大作业的登录系统。下面分享一下具体的代码。 首先定义一个结构体来存放用户的注册信息,账号密码等。 typedef struct The_users /... -
微信小程序入门七登录注册
2017-04-01 14:26:34上一章介绍了微信小程序入门六本地缓存和搜索,这章介绍小程序的登录注册页面。主要有表单的验证,错误信息的提示,form表单的取值,get / post 请求 ,反馈交互提示框,页面跳转 以及 页面UI。 效果图: 注册页面... -
登录注册页面跳转
2020-09-02 22:06:23用HTML、jQuery和css写一个简单的登录注册页面 看了一些前端部分的视频,有点手痒,想起大学时做的某管理系统的前端部分,当时基本都是靠着CV写的,现在想想应该可以自己写一点了。 话不多说,先上图: 首先是登录... -
LayUi做登录注册
2020-03-25 21:26:29LayUi登录注册页面附代码登录页面注册页面附加CSS,JS代码 登录页面 下面展示登录页面 代码如下。 <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" class="loginHtml"> <head> <... -
Vue项目之登录注册
2019-08-31 16:46:58Vue项目之登录注册1. 注册1.1 注册页面的布局 1. 注册 1.1 注册页面的布局 需要用到Vant的Field组件 1.views下新建一个注册页面 ,完成基本布局。引入Vue和Field并使用。 2.在官方文档中搜索,查看自己需要的内容,... -
JavaWeb实现用户登录注册功能实例
2018-03-08 17:13:40一、Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示... 这里以一个最常用的用户登录注册程序来讲解Servl... -
简易QT登录注册界面
2018-05-03 19:17:54需求功能如下:设计登录注册界面,有账号密码输入框,有登录注册输入框。点击注册时弹出注册窗口,注册完成后点击确定,信息回显到登录界面的账号密码输入框内。设计数据库,注册时信息录入数据库中,登录时从数据库... -
登录注册数据库建立
2019-01-09 11:55:14登录注册数据库建立 学习前端的时候Ajax学习的时候主要练习讲解的就是登录注册问题,从最开始的源生代码到后来的JQuery再到后面的AngularJS。讲了这三种登录注册问题。 我先讲一下后台数据库的建立,因为不管是哪... -
SpringBoot实现登录注册功能【Demo】
2018-07-07 23:50:39本文使用springboot+mybatis注解方式,完成简单的注册和登录功能。且前后端分离,向前端返回json字符串。 最终效果如下: 注册: 如果用户名重复:返回json串 {"msg":"用户名已存在","success":false,"detail... -
SpringBoot -登录注册
2018-04-03 16:56:58SpringBoot -登录注册在前面的学习中我们学会简单创建一个springboot项目,那么现在就开始学习如何做注册登录了工具springboot +maven +hibernate+mysql 参考了...html 分为主页面index、注册register、登录login... -
Javaweb登录注册界面入门教程
2019-07-29 17:16:43博主是一个自学了点Java,只是连那本《Java从入门到精通》基础知识都没看完的人,由于实习的需要,需要用JavaEE(J2E)开发一个简单的登录注册界面,通过强大的搜索引擎和无数的推盘重来,博主终于实现了一个基本的... -
PHP实现登录注册-LAMP示例
2020-12-02 12:55:01PHP+MySql实现登录注册,LAMP试水~ 文章目录 效果演示 login.html login.php register.php 源码 番外 基础的环境搭建参考: Apache安装配置(Windows和Linux)-有手就行 PHP安装配置(Windows和Linux)-一篇就够了 PHP... -
django的登录注册系统
2018-05-12 18:43:53转载至django的登录注册系统 摘要 django框架本身自带有登录注册,也可以自己写登录注册,下面将介绍这这2种方式实登录注册 一、自己写登录注册登出 1.注册regist 注册采用的是form表单,提交到数据库,在登录... -
C#登录注册程序
2017-06-15 14:27:52登录注册窗体,功能:点击注册将输入的信息储存在sqlserver数据库中,并判断账号是否已被注册过(数据库中是否已有该账号),点击登录若账号密码信息数据库中已存在即登录成功。 欢迎新手一起学习~望大神指点还有... -
java用户登录注册
2019-08-16 11:03:45用户登录注册 案例需求 涉及知识点 面向对象,接口,Java序列化,HashMap,IO流 欢迎界面 public class BootStrap { public static void main(String[] args) { System.out.println("欢迎来到自动售货系统,请... -
SpringBoot实现登录注册
2019-11-06 15:52:38话不多说,一个小小登录注册的案例向你展示SpringBoot的魅力 1 设计数据库 1.1表结构 1.2属性 id自增主键,name非空约束,唯一约束,password 2 IDEA配置 2.1 pom文件 <dependency> <groupId>... -
微信小程序登录注册界面
2019-06-02 21:55:21微信小程序登录注册界面 第一次接触微信小程序的开发,首先就是从前端的界面开始,我要做的是一个农场管理的微信小程序,大致包括登录、注册、主要功能界面这些,这里我就分享一下我的登录注册界面的设计和功能实现... -
Vue登录注册,并保持登录状态
2018-12-19 21:46:54关于vue登录注册,并保持登录状态,是vue玩家必经之路,网上也有很多的解决方法,但是有一些太过于复杂,新手可能会看的一脸懵逼,现在给大家介绍一种我自己写项目在用而且并不难理解的一种方法。 项目中有一些路由... -
用户登录注册案例
2018-05-04 18:45:19一、分析 用户登录注册案例 分析: 通过面向对象思想分析 A.有哪些类 B.类里面都有哪些东西 C.类和类之间的关系 有哪些类: 用户类: 成员变量:用户名、密码 成员方法:getXxx,setXxx ... -
表单实现登录注册功能
2016-08-24 11:05:26二、前端设计:表单实现登录注册功能 三、后台设计:MySQL数据库的增删改查 登录/注册的实现 在"我是大学生"子网页下设置两个超链接,完成用户的登录/注册 分步注册页: 分步表单这一部分是从... -
SSM框架整合---实现简单登录注册功能
2017-06-25 18:13:02SSM框架整合---实现简单登录注册功能