2013-04-14 35 views
0

我收到以下錯誤消息:如何獲得一個首選值到一個靜態的字符串變量?

「不能讓一個靜態引用從類型活動的非靜態方法 的getPreferences(INT)」是在我的情況的錯誤。 「TimeCardLogin」必須是一個靜態變量。」

如何獲取偏好到一個靜態變量String

public class MyBaseURLContainer extends Activity { 

    public static String urlPref = ""; 

    static String BASE_URL = 
      getPreferences(MODE_PRIVATE).getString("Name of variable",urlPref); 

    public static final String TimeCardLogin = BASE_URL + "/timecard"; 
} 
+0

這是一個關於Java的基本問題:你不能用靜態方法設置一個靜態變量(順便說一下,這就是錯誤所說的)。 – gipi

回答

2

我建議你做一個靜態的吸氣劑,它接受一個上下文作爲。論據方式),將實際編譯,和b)如果在某些時候你基本網址的變化,它會再像你的程序開始加載,而不是裝載最近的值是:

private final static String PREFS = "myUrlPrefs"; 

public static String getBaseUrl(Context context) { 
    return context.getSharedPreferences(PREFS, MODE_PRIVATE).getString(
     "Name of variable",urlPref); 
} 

你最好把它從另一個活動是這樣的:

String baseUrl = MyBaseUrlContainer.getBaseUrl(this); 

或者從任何地方,你有機會獲得這樣的背景下(一個活動是上下文):

String baseUrl = MyBaseUrlContainer.getBaseUrl(myContext); 

如果你絕對要在沒有訪問Context的地方使用此代碼(在Android應用程序中實際上應該幾乎不會出現這種情況),您可以在檢索到該值後存儲該值,但是第一次獲得必須的值時從上下文。

+0

這是更好,但使用activity.getApplicationContext() –

+0

感謝亞歷克斯 - 我改爲使用上下文和固定的名稱。我的舊代碼對於每個調用它的活動都會有不同的值!接得好。 – thomas88wp

+0

而且,重新getApplicationContext,我認爲這[post](http://stackoverflow.com/questions/2673510/android-storing-references-to-applicationcontext)將支持每次傳遞上下文。 – thomas88wp