在我的登录课程中,我获得了用户名。然后在我的报告类中,我尝试检索该名称。我在登录时输入用户名时使用了断点,字符串显示正确。但是,当我尝试从报告类访问它时,登录的函数然后返回一个空字符串。我已经在堆栈上四处查看并使用谷歌,我很确定我正在遵循我应该做的事情,但它无法正常工作。
以下是登录时的一些代码。如果需要,我可以显示更多代码,但是当我在登录时使用断点时,dName始终是正确的名称,所以driversName也是如此。但是当我从report返回到returnName时,driversName就是一个空字符串。我在我的班级中将driversName声明为全局而非本地变量。
private void getDriversName(String dName)
{
driversName=dName;
}
public String returnName()
{
return driversName;
}
以下是报告中的代码。我可以再次添加更多id。我也正确导入了登录。我使用了断点,当我使用这个步骤时,它让我登录。名字回来了。
LogIn login;
login=new LogIn();
String name= login.returnName();
driver.setText(name);
更新:我想通了我需要添加静态。
答案 0 :(得分:1)
您正在创建一个新的LogIn()
对象,然后立即检查返回名称。除非在构造函数中以某种方式设置名称,否则它将始终返回默认值。
答案 1 :(得分:1)
好吧,login=new LogIn();
表示您希望Java创建LogIn
类的新实例。每当创建一个新实例时,它都不知道任何可能存在的旧实例。您可能想要做的是保留用户名(例如下面的内容),并在“报告”类中需要时请求。
这样简单就可以解决问题:
public class UserContext {
public static String USERNAME;
public static void setUsername(String name) {
USERNAME = name;
}
}
在您的LogIn课程中,验证凭据然后使用经过身份验证的用户名调用UserContext.setUsername(...)
,然后在报告类中,您可以使用UserContext.USERNAME
。
简单,对吧?
答案 2 :(得分:1)
在调用login.returnName()之前,您是否正在调用 getDriversName 函数;从您的代码可以看出,在getDriversName函数调用之后,driversName将立即拥有值。
此外,您可以为登录和其他任务实施其他方法,即保留维护所有此类会话的公共类。您可以在登录后设置值,然后将它们放在整个项目的任何位置。喜欢
Common.getUserName()
{
return USERNAME;
}
并在登录成功后调用此函数。
Common.setUserName(String name)
{
this.USERNAME= name;
}
希望这会有所帮助。