2011-07-11 92 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