2012-05-07 55 views
0

在我的登錄類中,我獲取了用戶名。然後在我的報告課中,我嘗試找回那個名字。當我在登錄中輸入用戶名時,我使用了斷點,字符串顯示正確。但是,當我嘗試從報告類訪問它時,來自login的函數將返回一個空字符串。我在堆棧中四處查看,並使用谷歌,我非常確定我遵循我應該做的,但它不工作。嘗試從另一個類獲取字符串

以下是一些來自登錄的代碼。如果需要,我可以顯示更多代碼,但是當我在登錄中使用斷點時,dName始終是正確的名稱,driversName也是如此。但是當我從報告中返回returnName時,driversName就是一個空字符串。我已經將driversName聲明爲全局變量,而不是我的類中的局部變量。

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

public String returnName() 
{ 
    return driversName; 

} 

以下是報告中的代碼。我可以再次添加更多所需的ID。此外我正確導入登錄。我使用了斷點,當我使用該步驟時,它使我登錄。名稱將返回null。

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

更新:我想通了,我需要添加靜態。

+0

用戶名是什麼時候通過登錄屏幕獲得?它看起來像你試圖從一個新的LogIn實例中獲取一些實際上可能不存在的東西(或者它在LogIn的另一個實例中)。更多的代碼可能會有所幫助。 –

+0

這些是在單獨的活動(登錄和報告)? – Barak

回答

1

在調用login.returnName()之前調用getDriversName函數;從代碼中可以看出,driversName在getDriversName函數調用後將具有值。

此外,您還可以實施其他方法進行登錄和其他任務,即保持一個維護所有這些會話的公共類。您可以在登錄後設置值,然後在整個項目中的任何位置獲取值。像

Common.getUserName() 
{ 
    return USERNAME; 
} 

並在登錄成功後調用此函數。

Common.setUserName(String name) 
{ 

this.USERNAME= name; 

} 

希望這會有所幫助。

1

您正在創建一個新的LogIn()對象,然後立即檢查返回名稱。除非該名稱以某種方式在構造函數中設置,否則它將始終返回默認值。

+0

當我評論新的登錄()出我得到一個空指針異常。 – Aaron

1

嗯,login=new LogIn();表示您希望Java創建LogIn類的新實例。無論何時創建新實例,它都不知道任何可能一直存在的舊實例。你可能想要做的是堅持用戶名(例如下面的例子),並在「報告」類中需要時提出問題。

的東西,因爲這會做的伎倆一樣簡單:

public class UserContext { 
    public static String USERNAME; 
    public static void setUsername(String name) { 
     USERNAME = name; 
    } 
} 

您的用戶類,驗證憑據然後調用UserContext.setUsername(...)與認證的用戶名,然後在您的報告類,你可以使用UserContext.USERNAME

很簡單吧?

+0

你能解釋一下關於實施工廠的更多信息嗎? – Aaron

+0

增加了一個基本的例子。 –

相關問題