OkHttp实现登陆注册验证

首先,添加OkHttp依赖java

implementation 'com.squareup.okhttp3:okhttp:3.14.2'

由于静态接口须要Java8才能支持使用,咱们要使用静态接口,须要在build.gradle文件中添加以下配置声明,使用Java8编译android

 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }

否则会出现以下异常:数据库

错误一:api

   Static interface methods are only supported starting with Android N (--min-api 24): java.util.List okhttp3.Dns.lambda$static$0(java.lang.String)   Message{kind=ERROR, text=Static interface methods are only supported starting with Android N (--min-api 24): 
java.util.List okhttp3.Dns.lambda$static$0(java.lang.String),sources=[Unknown source file], tool name=Optional.of(D8)}

错误二:网络

Invoke-customs are only supported starting with Android O (--min-api 26) Message{kind=ERROR, text=Invoke-customs are only supported starting with Android O (--min-api 26), sources=[Unknown source file], tool name=Optional.of(D8)}

 

在AndroidManifest.xml中添加网络访问权限app

<uses-permission android:name="android.permission.INTERNET" />

 

建立OkHttpTools工具类:ide

 1 public class OkHttpTools {  2     //建立OkHttpClient对象
 3     private final OkHttpClient client = new OkHttpClient();  4     //登陆验证的方法
 5     public String Login(String username,String password){  6         //建立请求体并传递参数
 7         RequestBody formBody = new FormBody.Builder()  8                 .add("username",username)  9                 .add("password",password) 10  .build(); 11         //建立Request对象
12         Request request = new Request.Builder() 13                 .url("http://192.168.*.*:8080/LoginUser") 14  .post(formBody) 15  .build(); 16         //获取Response对象
17         try (Response response = client.newCall(request).execute()) { 18             //响应成功并返回响应内容
19             if (response.isSuccessful()) { 20                 return response.body().string(); 21                 //此时代码执行在子线程,修改UI的操做使用handler跳转到UI线程
22  } 23         }catch (Exception e){ 24  e.printStackTrace(); 25  } 26         //响应失败返回" "
27         return " "; 28  } 29     //注册验证的方法
30     public String Register(String username,String password){ 31         RequestBody formBody = new FormBody.Builder() 32                 .add("username",username) 33                 .add("password",password) 34  .build(); 35         Request request = new Request.Builder() 36                 .url("http://192.168.*.*:8080/RegisterUser") 37  .post(formBody) 38  .build(); 39 
40         try (Response response = client.newCall(request).execute()) { 41             if (response.isSuccessful()) { 42                 return response.body().string(); 43  } 44         }catch (Exception e){ 45  e.printStackTrace(); 46  } 47         return " "; 48     } 
49 }

 

LoginActivity中工具

1. 获取响应内容并进行验证:post

 1         // 登陆按钮的点击事件
 2         btn_login.setOnClickListener(new View.OnClickListener() {  3  @Override  4             public void onClick(View v) {  5                 //获取界面的控件
 6  getEditString();  7                 //控件的密码进行加密
 8                 String md5Psw = MD5Utils.md5(psw);  9                 //从SharedPreferences中根据用户名获取密码
10                 spPsw = readSpw(userName); 11                 if (TextUtils.isEmpty(userName)) { 12                     Toast.makeText(LoginActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show(); 13                     return; 14                 } else if (TextUtils.isEmpty(psw)) { 15                     Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show(); 16                     return; 17                 } else if (true) { 18                     //建立子线程并获取数据
19                     new Thread() { 20  @Override 21                         public void run() { 22                             OkHttpTools tools = new OkHttpTools(); 23                             String flag=""; 24                             //传递参数获取响应内容
25                             String result = tools.Login(userName, psw); 26                             //判断数据库查询出来值是否与输入的值相等
27                             if (result.equals(userName+psw)){ 28                                 flag="success"; 29  } 30                             if (flag.equals("success")) { 31  handler.sendEmptyMessage(MSG_SUCCESS); 32                             } else { 33  handler.sendEmptyMessage(MSG_FAIL); 34  } 35  } 36  }.start();
37                     return; 38                 } else if (!TextUtils.isEmpty(spPsw) && !md5Psw.equals(spPsw)) { 39                     Toast.makeText(LoginActivity.this, "输入的用户名和密码不一致", Toast.LENGTH_SHORT).show(); 40                     return; 41                 } else { 42                     Toast.makeText(LoginActivity.this, "此用户名不存在", Toast.LENGTH_SHORT).show(); 43                     return; 44  } 45  } 46         });

 2. Handler接收子线程中的验证消息并进行处理:gradle

 1     //界面上显示数据
 2     Handler handler = new Handler() {  3  @Override  4         public void handleMessage(Message msg) {  5             if (msg.what == MSG_SUCCESS) {  6                 Toast.makeText(LoginActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();  7                 //保存登陆的状态和用户名
 8                 saveLoginStatus(true, userName);  9                 //登陆成功的状态保存到MainActivity
10                 Intent intent = new Intent(); 11                 intent.putExtra("isLogin", true); 12  setResult(RESULT_OK, intent); 13                 LoginActivity.this.finish(); 14             }else { 15                 Toast.makeText(LoginActivity.this, "登陆失败", Toast.LENGTH_SHORT).show(); 16  } 17  } 18     };

 

RegisterActivity中

1. 获取响应内容并进行验证:

 1         //注册按钮的点击事件
 2         btn_register.setOnClickListener(new View.OnClickListener() {  3  @Override  4             public void onClick(View v) {  5                 //获取输入到控件的值
 6  getEditString();  7                 if (TextUtils.isEmpty(userName)) {  8                     Toast.makeText(RegisterActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show();  9                     return; 10                 } else if (TextUtils.isEmpty(psw)) { 11                     Toast.makeText(RegisterActivity.this, "请输入密码", Toast.LENGTH_SHORT).show(); 12                     return; 13                 } else if (TextUtils.isEmpty(pswAgain)) { 14                     Toast.makeText(RegisterActivity.this, "请输入确认密码", Toast.LENGTH_SHORT).show(); 15                     return; 16                 } else if (!psw.equals(pswAgain)) { 17                     Toast.makeText(RegisterActivity.this, "确认密码和密码不一致", Toast.LENGTH_SHORT).show(); 18                     return; 19                 } else { 20                     new Thread() { 21  @Override 22                         public void run() { 23                             OkHttpTools tools = new OkHttpTools(); 24                             String result = tools.Register(userName, psw); 25                             if (result.equals("success")) { 26  handler.sendEmptyMessage(MSG_SUCCESS); 27                             } else if (result.equals(userName)) { 28  handler.sendEmptyMessage(MSG_REPEAT); 29                             } else { 30  handler.sendEmptyMessage(MSG_FAIL); 31  } 32  } 33  }.start(); 34                     return; 35  } 36  } 37         });

 2. Handler接收子线程中的验证消息并进行处理:

 1     Handler handler = new Handler() {  2  @Override  3         public void handleMessage(Message msg) {  4             if (msg.what == MSG_SUCCESS) {  5                 Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();  6                 //把用户名和密码保存到SharedPreferences中
 7  saveRegisterInfo(userName, psw);  8                 //把注册成功的用户名传到LoginActivity
 9                 Intent data = new Intent(); 10                 //要传的用户名
11                 data.putExtra("userName", userName); 12  setResult(RESULT_OK, data); 13                 RegisterActivity.this.finish(); 14             } else if (msg.what == MSG_REPEAT) { 15                 Toast.makeText(RegisterActivity.this, "此用户名已存在", Toast.LENGTH_SHORT).show(); 16             } else { 17                 Toast.makeText(RegisterActivity.this, "注册失败", Toast.LENGTH_SHORT).show(); 18  } 19  } 20     };

 

Web项目中获取请求,进行数据处理并返回响应结果:

UserController:

 1 @Controller  2 public class UserController {  3     //注入userService
 4  @Autowired  5     private UserService userService;  6     //处理用户登陆的方法
 7     @RequestMapping("/LoginUser")  8     public void LoginUser(HttpServletRequest request,HttpServletResponse response) throws IOException {  9         //设置响应编码
10         response.setCharacterEncoding("UTF-8"); 11         PrintWriter out = response.getWriter(); 12         //获取请求的用户名和密码
13         String username = request.getParameter("username"); 14         String password = request.getParameter("password"); 15         //对用户名和密码进行拼接
16         String user= username+password; 17         //从数据库中获取所有数据
18         List<User> users = userService.findUsers(); 19         //存放从数据库中获取的所有数据
20         List<String> userList = new ArrayList<>(); 21         for (User u:users){ 22             String info = u.getUsername()+u.getPassword(); 23  userList.add(info); 24  } 25         //判断集合中是否含有获取的数据
26         if (userList.contains(user)){ 27             System.out.println("true"); 28  out.write(user); 29         }else { 30             System.out.println("false"); 31             out.write("fail"); 32  } 33 
34  } 35     //处理用户注册的方法
36     @RequestMapping("/RegisterUser") 37     public void RegisterUser(HttpServletRequest request,HttpServletResponse response) throws IOException { 38         //设置响应编码
39         response.setCharacterEncoding("UTF-8"); 40         PrintWriter out = response.getWriter(); 41         //获取请求信息
42         String username = request.getParameter("username"); 43         String password = request.getParameter("password"); 44         //进行注册以前先判断数据库中是否含有该用户名 45         //查询所有信息并把信息添加到集合中,以备验证用户名是否存在
46         List<User> users = userService.findUsers(); 47         List<String> userList = new ArrayList<>(); 48         for (User u:users){ 49             String name = u.getUsername(); 50  userList.add(name); 51  } 52         //判断是否含有该用户
53         if (!userList.contains(username)){ 54             //不含有该用户名向数据库中添加信息
55             User user = new User(); 56  user.setUsername(username); 57  user.setPassword(Integer.parseInt(password)); 58             //向数据库中插入数据
59             int row = userService.insertUser(user); 60             if (row>0){ 61                 out.write("success"); 62             }else { 63                 System.out.println("信息添加失败"); 64                 out.write("fail"); 65  } 66         }else if (userList.contains(username)){ 67             //含有该用户名把用户名返回
68  out.write(username); 69         }else { 70             out.write("fail"); 71  } 72  } 73 } 74
相关文章
相关标签/搜索