首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 空指針異常(NullPointerException)常見原因與排查實戰

     編輯:程式設計綜合問答

異常現象

應用崩潰,Logcat 顯示:

java.lang.NullPointerException: Attempt to invoke virtual method '...' on a null object reference

高頻原因 Top 5

  1. findViewById 返回 null:布局未正確加載、ID 拼寫錯誤、Fragment 中未用 view.findViewById。
  2. Intent/Bundle 取值未判空:getStringExtra("key") 返回 null 直接調用方法。
  3. 生命周期競態:onCreateView 前訪問 View、onDestroy 後仍持有引用。
  4. 網絡/異步回調中 UI 更新:Activity 已銷毀,Handler/Callback 仍執行 textView.setText()。
  5. 三方庫初始化缺失:如 Glide、OkHttp、EventBus 未在 Application 中初始化。

快速定位技巧

  • Logcat 紅字堆棧:點擊藍色行號跳轉源碼行。
  • Android Studio Debug 斷點:在疑似行打斷點,觀察變量值。
  • Layout Inspector:檢查 View 層級與 ID 是否匹配。

防禦性編程模板

// 1. View 綁定
TextView tv = findViewById(R.id.tv_name);
if (tv != null) tv.setText(name);

// 2. Bundle 取值
String value = getIntent().getStringExtra("key");
if (value != null) { /* 使用 */ }

// 3. 異步回調中檢查 Activity 存活
if (!isFinishing() && !isDestroyed()) {
    runOnUiThread(() -> tv.setText(data));
}

// 4. 使用 ?. 操作符(Kotlin)或 Objects.requireNonNull(Java)

參考資源

CSDN 經典排查指南:Android 空指針異常系統性排查

總結

NPE 是 Android 開發第一大崩潰源,核心對策:假設一切可為 null,用前必判,生命周期感知,善用工具定位。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved