{
  "id": "android/connectivity-manager-network-callback-null",
  "signature": "java.lang.NullPointerException: Attempt to invoke virtual method 'void android.net.ConnectivityManager$NetworkCallback.onAvailable(android.net.Network)' on a null object reference",
  "signature_zh": "java.lang.NullPointerException：尝试在空对象引用上调用虚拟方法 'void android.net.ConnectivityManager$NetworkCallback.onAvailable(android.net.Network)'",
  "regex": "NullPointerException.*NetworkCallback\\.onAvailable.*null object reference",
  "domain": "android",
  "category": "runtime_error",
  "subcategory": null,
  "root_cause": "NetworkCallback instance is null when ConnectivityManager triggers the callback, often due to premature unregistration or lifecycle mismanagement.",
  "root_cause_type": "generic",
  "root_cause_zh": "当 ConnectivityManager 触发回调时 NetworkCallback 实例为 null，通常是由于过早取消注册或生命周期管理不当。",
  "versions": [
    {
      "version": "Android 10 (API 29)",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "Android 11 (API 30)",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "Android 12 (API 31)",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "Wrap callback call in try-catch NullPointerException",
      "why_fails": "Silently swallows the error but doesn't fix the root cause; callback may never fire again.",
      "fail_rate": 0.9,
      "condition": "",
      "sources": []
    },
    {
      "action": "Register callback in Application.onCreate()",
      "why_fails": "Application context may outlive Activity; callback still null if unregistered incorrectly.",
      "fail_rate": 0.75,
      "condition": "",
      "sources": []
    },
    {
      "action": "Use HandlerThread for callback registration",
      "why_fails": "Threading doesn't prevent null reference; the issue is lifecycle, not threading.",
      "fail_rate": 0.85,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "Check callback for null before unregistering: `if (networkCallback != null) { connectivityManager.unregisterNetworkCallback(networkCallback); }`",
      "success_rate": 0.9,
      "how": "Check callback for null before unregistering: `if (networkCallback != null) { connectivityManager.unregisterNetworkCallback(networkCallback); }`",
      "condition": "",
      "sources": []
    },
    {
      "action": "Use a WeakReference to hold the callback: `private var callbackRef: WeakReference<NetworkCallback>? = null` and check `callbackRef?.get()` before use.",
      "success_rate": 0.85,
      "how": "Use a WeakReference to hold the callback: `private var callbackRef: WeakReference<NetworkCallback>? = null` and check `callbackRef?.get()` before use.",
      "condition": "",
      "sources": []
    },
    {
      "action": "In Activity onStop(), set a flag and delay unregistration until onDestroy() with null check: `if (isCallbackRegistered && networkCallback != null) { ... }`",
      "success_rate": 0.88,
      "how": "In Activity onStop(), set a flag and delay unregistration until onDestroy() with null check: `if (isCallbackRegistered && networkCallback != null) { ... }`",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [
    "Check callback for null before unregistering: `if (networkCallback != null) { connectivityManager.unregisterNetworkCallback(networkCallback); }`",
    "Use a WeakReference to hold the callback: `private var callbackRef: WeakReference<NetworkCallback>? = null` and check `callbackRef?.get()` before use.",
    "In Activity onStop(), set a flag and delay unregistration until onDestroy() with null check: `if (isCallbackRegistered && networkCallback != null) { ... }`"
  ],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": "https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback",
  "official_doc_section": null,
  "error_code": null,
  "verification_tier": "ai_generated",
  "confidence": 0.82,
  "fix_success_rate": 0.8,
  "resolvable": "true",
  "first_seen": "2024-01-10",
  "last_confirmed": "2024-06-01",
  "last_updated": "2024-06-01",
  "evidence_count": 1,
  "tags": [],
  "locale": "en",
  "aliases": []
}