学习进度条
Android 学习打卡系统之登录与注册功能实现(对之前完成的手机端APP进行优化)
今日学习时间:2 小时
今日代码量:200 行
今日博客:1 篇(Android 学习打卡系统之登录与注册功能实现)
一、核心知识点
登录功能实现
在LoginActivity.java中,通过Retrofit与后端 API 进行交互,实现用户登录功能。使用SharedPreferences存储用户登录状态和角色信息。
ApiService apiService = RetrofitClient.getClient().create(ApiService.class);
Call<ApiResponse<String>> call = apiService.loginUser(studentId, password);
call.enqueue(new Callback<ApiResponse<String>>() {
@Override
public void onResponse(Call<ApiResponse<String>> call, Response<ApiResponse<String>> response) {
if (response.isSuccessful() && response.body() != null) {
ApiResponse<String> apiResponse = response.body();
if (apiResponse.getCode() == 1) {
String token = apiResponse.getData();
Map<String, Object> claims = JwtUtil.parseToken(token);
String role = (String) claims.get("role");
saveLoginState(token, studentId, role);
navigateToMain(role);
}
}
}
@Override
public void onFailure(Call<ApiResponse<String>> call, Throwable t) {
Toast.makeText(LoginActivity.this, "网络错误: " + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
注册功能实现
在RegisterActivity.java和TeacherRegisterActivity.java中,用户可以进行学生和教师的注册操作。同样使用Retrofit与后端 API 交互。
User user = new User(
etTeacherId.getText().toString(),
etUsername.getText().toString(),
etPhone.getText().toString(),
etClassName.getText().toString(),
etUnit.getText().toString(),
etPassword.getText().toString()
);
user.setRole(User.Role.TEACHER);
ApiService apiService = RetrofitClient.getClient().create(ApiService.class);
Call<ApiResponse<String>> call = apiService.registerTeacher(user);
call.enqueue(new Callback<ApiResponse<String>>() {
@Override
public void onResponse(Call<ApiResponse<String>> call, Response<ApiResponse<String>> response) {
if (response.isSuccessful()) {
if (response.body() != null) {
ApiResponse<String> apiResponse = response.body();
if (apiResponse.getCode() == 1) {
Toast.makeText(TeacherRegisterActivity.this, apiResponse.getMessage(), Toast.LENGTH_SHORT).show();
startActivity(new Intent(TeacherRegisterActivity.this, LoginActivity.class));
finish();
}
}
}
}
@Override
public void onFailure(Call<ApiResponse<String>> call, Throwable t) {
Toast.makeText(TeacherRegisterActivity.this, "网络错误: " + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
关键配置:
在build.gradle中添加Retrofit和Gson的依赖:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
三、安全注意事项
JWT Token 解析:使用JwtUtil.java中的parseToken方法解析 JWT Token,确保用户角色信息的安全获取。
public static Map<String, Object> parseToken(String token) {
try {
String[] parts = token.split("\\.");
String payloadJson = new String(Base64.decode(parts[1], Base64.URL_SAFE));
return new Gson().fromJson(payloadJson, Map.class);
} catch (Exception e) {
throw new RuntimeException("Token解析失败");
}
}
密码传输:在登录和注册过程中,密码以明文形式传输,实际开发中应使用加密算法进行加密传输。
四、今日实践成果
实现了学生和教师的登录功能,根据用户角色跳转到不同的主界面。
完成了学生和教师的注册功能,注册成功后可正常登录。
遇到的问题:
Token 解析失败(解决:检查 Token 格式和JwtUtil方法)
网络请求失败(解决:检查网络连接和 API 接口地址)
五、明日计划
学习每日总结和打卡记录的添加功能实现。
研究如何优化登录和注册界面的用户体验。
六、关键收获
掌握了Retrofit的基本使用,实现了 Android 应用与后端 API 的交互。
了解了 JWT Token 的解析过程,提高了应用的安全性。

浙公网安备 33010602011771号