You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android登录功能报错:Cannot resolve symbol 'username' 求解决方案

解决步骤

先修复编译错误

你在loginUser(LoginRequest loginRequest)方法里调用ApiClient.getService().loginUser(username)时,username变量未定义,直接从传入的loginRequest对象中获取即可:

Call<LoginResponse> loginResponseCall = ApiClient.getService().loginUser(loginRequest.getUsername());

完善登录逻辑(解决只验证用户名的漏洞)

当前代码仅验证用户名,不符合登录场景需求,需要同时验证用户名和密码,以下是完整调整方案:

1. 修改后端API验证逻辑

更新GetuserName方法,添加密码参数并修改SQL查询条件:

[HttpGet]
public IHttpActionResult GetuserName(string username, string password)
{
    List<People> list = new List<People>();
    using (SqlCommand com = new SqlCommand("Select LoginID, PersonEye, username, password from tblLogin where username = @name AND password = @pwd", mainconn))
    {
        mainconn.Open();
        com.Parameters.Add("@name", SqlDbType.VarChar).Value = username;
        com.Parameters.Add("@pwd", SqlDbType.VarChar).Value = password;
        using (SqlDataReader dr = com.ExecuteReader())
        {
            while (dr.Read())
            {
                list.Add(new People()
                {
                    LoginID = Convert.ToInt32(dr.GetValue(0)),
                    PersonEye = Convert.ToString(dr.GetValue(1)),
                    username = Convert.ToString(dr.GetValue(2)),
                    password = Convert.ToString(dr.GetValue(3))
                });
            }
        }
        return Ok(list);
    }
}

2. 更新前端Retrofit接口

修改UserService,支持传递用户名和密码两个参数,并修正接口路径:

public interface UserService {
    @GET("Person/GetuserName")
    Call<LoginResponse> loginUser(@Query("username") String username, @Query("password") String password);
}

3. 调整前端调用逻辑

在loginUser方法中同时传入用户名和密码,并增加登录失败的判断:

public void loginUser(LoginRequest loginRequest) {
    Call<LoginResponse> loginResponseCall = ApiClient.getService().loginUser(loginRequest.getUsername(), loginRequest.getPassword());
    loginResponseCall.enqueue(new Callback<LoginResponse>() {
        @Override
        public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
            if(response.isSuccessful()) {
                LoginResponse loginResponse = response.body();
                if(loginResponse != null && loginResponse.getPeopleList() != null && !loginResponse.getPeopleList().isEmpty()) {
                    startActivity(new Intent(MainActivity.this, Visitor.class).putExtra("data",loginResponse));
                    finish();
                } else {
                    Toast.makeText(MainActivity.this, "用户名或密码错误", Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(MainActivity.this, "请求失败,请稍后重试", Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void onFailure(Call<LoginResponse> call, Throwable t) {
            String message = t.getLocalizedMessage();
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
        }
    });
}

4. 修正LoginResponse数据结构

当前LoginResponse字段与后端返回的List<People>不匹配,需修改:

public class LoginResponse {
    private List<People> peopleList;

    public List<People> getPeopleList() {
        return peopleList;
    }

    public void setPeopleList(List<People> peopleList) {
        this.peopleList = peopleList;
    }
}

同时创建People类对应后端返回字段:

public class People {
    private int LoginID;
    private String PersonEye;
    private String username;
    private String password;

    public int getLoginID() { return LoginID; }
    public void setLoginID(int loginID) { LoginID = loginID; }
    public String getPersonEye() { return PersonEye; }
    public void setPersonEye(String personEye) { PersonEye = personEye; }
    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; }
}

内容的提问来源于stack exchange,提问作者Reborn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:35:11