0

在我的登录类中,我得到了用户名。然后在我的报告类中,我尝试检索该名称。当我在登录中输入用户名时,我使用了断点,字符串显示正确。但是,当我尝试从报告类访问它时,登录中的函数会返回一个空字符串。我在堆栈上环顾四周并使用谷歌,我很确定我正在遵循我应该做的事情,但它不起作用。

这是登录时的一些代码。如果需要,我可以显示更多代码,但是当我在登录中使用断点时,dName 始终是正确的名称,driversName 也是如此。但是当我从报告中返回 returnName 时,driversName 是一个空字符串。我已在班级中将 driversName 声明为全局变量而不是局部变量。

private void getDriversName(String dName)
{
    driversName=dName;
}

public String returnName()
{
    return driversName;

}

这是报告中的代码。我可以再一次添加更多需要的 id。我也正确导入了登录名。我使用了断点,当我使用 step in 时,我需要登录。名称返回为空。

   LogIn login;
   login=new LogIn();
   String name= login.returnName();
   driver.setText(name);

更新:我发现我需要添加静态。

4

3 回答 3

1

您正在创建一个新LogIn()对象,然后立即检查返回名称。除非名称以某种方式在构造函数中设置,否则它将始终返回默认值。

于 2012-05-07T15:37:49.043 回答
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.

很简单,对吧?

于 2012-05-07T15:38:45.457 回答
1

你是在调用 login.returnName() 之前调用getDriversName函数吗?从您的代码中可以看出,在 getDriversName 函数调用之后,driversName 将具有价值。

此外,您可以为登录和其他任务实现其他方法,即保留一个维护所有此类会话的公共类。您可以在登录后设置值,然后在整个项目的任何位置获取它们。像

Common.getUserName()
{
    return USERNAME;
}

并在登录成功后调用此函数。

Common.setUserName(String name)
{

this.USERNAME= name;

}

希望这会有所帮助。

于 2012-05-07T15:39:57.520 回答