簡體   English   中英

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

[英]Android, why I cant call my stringarray inside a method outside of onCreate?

在我的 onCreate 方法之外,我的 stringarray 無法被調用,這是為什么?

我嘗試在 onCreate 之外的方法中使用 getResources() 再次初始化 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"..

我相信你的問題是可變范圍 你已經在 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();
        }
    }

}

參考:

代替

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

經過

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM