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

Android AlertDialog.Builder 拋出 NullPointerException:Context 傳錯是主因

     編輯:程式設計綜合問答

錯誤堆疊

java.lang.NullPointerException
    at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
    at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359)
    at com.radzik.devadmin.MainActivity$5.onClick(MainActivity.java:140)

第 140 行:AlertDialog.Builder b = new AlertDialog.Builder(ctx);

原因

ctx 為 null 或非 Activity 型別的 Context(如 ApplicationContext)。AlertDialog 需要具備視窗權杖的 Activity Context 才能正確解析主題。

修正方式

// 在 Activity 內部
AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this);

// 或在 Fragment 內部
AlertDialog.Builder b = new AlertDialog.Builder(requireActivity());

// 或持有 WeakReference<Activity> 並檢查非 null
if (activityRef.get() != null) {
    new AlertDialog.Builder(activityRef.get())...show();
}

常見錯誤情境

  • 在 BroadcastReceiver.onReceive() 直接用傳入的 context 建立 Dialog(需啟動新 Activity 或用 TYPE_SYSTEM_ALERT 視窗)。
  • 用 getApplicationContext() 建立 Dialog。
  • 非 UI 執行緒直接 show()(需 runOnUiThread)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved