2011-07-11 115 views
0

這可能看起來像一個小問題,但我不知道如何處理它。從onCreate方法更改全局變量

我已經在xml文件中創建了一個字符串數組。接下來,我要導入該陣列爲String [],這是我如何做到這一點:

static String[] rlsMixTitleArr = new String[] {}; 

我已經經由吐司測試:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.releases); 

    // array from XML 
    String[] rlsMixTitleArr0 = getResources().getStringArray(R.array.releasesMixTitle); 
    rlsMixTitleArr = rlsMixTitleArr0; 

    // rest of program... 
} 

rlsMixTitleArr這種方法如上述被聲明消息表明全局變量rlsMixTitleArr確實得到了正確更新。然而,問題是,當我嘗試從另一個方法(而不是onCreate)訪問rlsMixTitleArr時,它就像它根本沒有更新過,而且它只是一個空數組(因爲它在頂部以這種方式聲明)。您應該認爲onCreate是程序啓動時首先發生的事情,因此全局變量將被更新(並可以被其他方法使用)。據我所知,你不能從onCreate方法的資源中獲取某些東西。所以我現在卡住了。

我如何得到它的工作?

+0

您試圖通過哪種方法來訪問它? (無法想象在onCreate()之前被調用)。還有什麼特別的原因,你不直接加載數組到'rlsMixTitleArr'? –

回答

0

嘗試改爲爲靜態數組創建一個訪問器,並檢查它是否已被填充。這樣數組就可以按需創建而不是在事件處理程序中創建,應該在需要之前創建它。

static String[] rlsMixTitleArr = null; 


public static String[] getRlsMixTitleArray(){ 
    if (rlsMixTitleArray == null) { 
     rlsMixTitleArray = getResources().getStringArray(R.array.releasesMixTitle); 
    } 

    return rlsMixTitleArray; 
} 
+0

感謝您的回答,但我擔心它不起作用。首先,我必須從方法中刪除「靜態」以使其無誤。其次,當我調用這個方法時,我得到一個NullPointerException。 – eightx2

+0

啊... getResources()是一個實例方法,然後呢?那麼爲什麼不在對象的構造函數中調用數組填充線呢? // Edit - nope,在創建問題之前仍然無法解決它的問題。你可以讓getResources()是靜態的嗎? – Angie

+0

我也許會以另一種方式 - 如果可能的話,擺脫靜態。 rlxMixTitleArr需要是靜態的嗎? – mouser