Android,为什么我不能在onCreate之外的方法中调用stringarray?

时间:2018-10-16 17:37:54

标签: java android arrays oop oncreate

在我的onCreate方法之外,我的stringarray无法调用,为什么呢?

我尝试使用getResources();在onCreate之外的方法中再次初始化stringarray;但我也不能这样称呼  我猜想在编程世界中还缺少一些基础知识,我还不是很新,我能帮我一下,还是解释一下为什么不能在onCreate之外调用字符串数组和/或如何解决它?

onCreate内的示例:

final String[] list = res.getStringArray(R.array.fact);

onCreate之外:

public void facts(){
   getResources();
final String[] list = res.getStringArray(R.array.fact);

}// marked res. in red saying "qualifier must be an expression" and without that I cant call "list"..

2 个答案:

答案 0 :(得分:0)

替换

final String[] list = res.getStringArray(R.array.fact); 

通过

final String[] list = getResources().getStringArray(R.array.fact); 

答案 1 :(得分:0)

我相信您的问题是可变范围。您已经在onCreate()方法中声明了字符串数组,并为其指定了“方法范围”,然后便准备在另一个方法中对其进行访问。我建议将字符串数组声明为类级别的变量,以便您可以从该类中的任何方法访问它。

为避免Ben P.在注释中指出的NullPointerException问题,您可以在onResume()方法中初始化数组变量,以便在需要在其他任何地方使用它之前准备好使用它

请务必查看代码示例下方的参考链接。我认为他们会比我在这里的快速解答中更好地解释“为什么”。

public class MainActivity extends AppCompatActivity {

    private static String[] list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();

        // onResume() runs after onCreate() and onStart() in the Android Activity lifecycle.
        // If your array has not been initialized yet, do it now.
        if (list == null || list.length == 0) {
            list = getResources().getStringArray(R.array.fact);
        }
    }

    public void facts() {
        // Do something with your array...
        for (String arrayItem : list) {
            String fact = arrayItem.toUpperCase();
        }
    }

}

参考: