異常堆疊:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 明確指出:調用 setAdapter 的 ListView 對象為 null。
// 錯誤:在 Fragment 中未用 view.findViewById
ListView listView = findViewById(R.id.list_view); // 缺少 view.
// 正確:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
ListView listView = view.findViewById(R.id.list_view); // 必須用 view.
// ...
}
android:id="@+id/list_view" vs 代碼 R.id.listView(大小寫、下劃線)。AsyncTask 執行期間 Fragment 已銷毀,onPostExecute 運行時 getView() 返回 null。解決:在 onDestroy 取消任務 task.cancel(true),或用 WeakReference 持有 View。onPostExecute 首行打印 Log.d("TAG", "listView=" + listView) 確認是否為 null。ListView。findViewById 在正確的 View 層級調用(Fragment 用 view.,Activity 用 this.)。棄用 AsyncTask(API 30 棄用),改用:
ExecutorService + runOnUiThreadLiveData + ViewModel + 協程RxJava / Flow核心教訓:任何調用 View 方法前必須確保 View 非空且附著於窗口,這是 Android UI 開發的鐵律。