学习进度条

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 的解析过程,提高了应用的安全性。

posted @ 2025-05-01 21:56  haoyinuo  阅读(7)  评论(0)    收藏  举报