Activity 啟動時直接崩潰,日誌提示 `NullPointerException` 指向 `ArrayAdapter` 構造函數傳入的 `this`(Context)為 null。
public class MainActivity extends Activity {
private String[] str = {"one","two","three","four"};
private GridView gv;
// 錯誤:成員變量初始化時調用構造函數,this 尚未完全構造
ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, str);
// ...
}
Java 類初始化順序:
在步驟 5 時,`Activity` 的 `onCreate()` 尚未調用,`Context` 內部狀態未就緒,傳入 `this` 導致 `ArrayAdapter` 內部調用 `getSystemService()` 等方法失敗。
public class MainActivity extends Activity {
private ArrayAdapter arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 此時 this (Context) 完全可用
arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, str);
gv.setAdapter(arrayAdapter);
}
}
private ArrayAdapter getAdapter() {
if (arrayAdapter == null) {
arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, str);
}
return arrayAdapter;
}
修正後,Activity 正常啟動,GridView 正確顯示數據。