[英]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.