试图从另一个类中获取一个字符串

时间:2012-05-07 15:32:40

标签: android class

在我的登录课程中,我获得了用户名。然后在我的报告类中,我尝试检索该名称。我在登录时输入用户名时使用了断点,字符串显示正确。但是,当我尝试从报告类访问它时,登录的函数然后返回一个空字符串。我已经在堆栈上四处查看并使用谷歌,我很确定我正在遵循我应该做的事情,但它无法正常工作。

以下是登录时的一些代码。如果需要,我可以显示更多代码,但是当我在登录时使用断点时,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);

更新:我想通了我需要添加静态。

3 个答案:

答案 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;

}

希望这会有所帮助。