{"record":{"id":"3a8cbc66c17aed90","repo":"didi/DoKit","slug":"namesandvalues-null","errorCode":null,"errorMessage":"namesAndValues == null","messagePattern":"namesAndValues == null","errorType":"exception","errorClass":"NullPointerException","httpStatus":null,"severity":"error","filePath":"Android/dokit/src/main/java/com/didichuxing/doraemonkit/kit/network/common/CommonHeaders.java","lineNumber":161,"sourceCode":"    }\n    return result;\n  }\n\n  private static String get(String[] namesAndValues, String name) {\n    for (int i = namesAndValues.length - 2; i >= 0; i -= 2) {\n      if (name.equalsIgnoreCase(namesAndValues[i])) {\n        return namesAndValues[i + 1];\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Returns headers for the alternating header names and values. There must be an even number of\n   * arguments, and they must alternate between header names and values.\n   */\n  public static CommonHeaders of(String... namesAndValues) {\n    if (namesAndValues == null) throw new NullPointerException(\"namesAndValues == null\");\n    if (namesAndValues.length % 2 != 0) {\n      throw new IllegalArgumentException(\"Expected alternating header names and values\");\n    }\n\n    // Make a defensive copy and clean it up.\n    namesAndValues = namesAndValues.clone();\n    for (int i = 0; i < namesAndValues.length; i++) {\n      if (namesAndValues[i] == null) throw new IllegalArgumentException(\"Headers cannot be null\");\n      namesAndValues[i] = namesAndValues[i].trim();\n    }\n\n    // Check for malformed headers.\n    for (int i = 0; i < namesAndValues.length; i += 2) {\n      String name = namesAndValues[i];\n      String value = namesAndValues[i + 1];\n      if (name.length() == 0 || name.indexOf('\\0') != -1 || value.indexOf('\\0') != -1) {\n        throw new IllegalArgumentException(\"Unexpected header: \" + name + \": \" + value);\n      }","sourceCodeStart":143,"sourceCodeEnd":179,"githubUrl":"https://github.com/didi/DoKit/blob/626827cddb2feb2f3aee87a52a064b4e5ca2bed4/Android/dokit/src/main/java/com/didichuxing/doraemonkit/kit/network/common/CommonHeaders.java#L143-L179","documentation":"Thrown by CommonHeaders.of(String... namesAndValues) when the varargs array is null. DoKit's CommonHeaders is a lightweight okhttp-Headers-style container used to snapshot request/response headers for the network inspector; the factory requires a non-null alternating name/value array.","triggerScenarios":"Calling CommonHeaders.of((String[]) null) directly, or passing a null array variable such as a header array that was never initialized by an interceptor.","commonSituations":"Custom interceptors or mock servers forwarding a headers array that a previous stage failed to populate (e.g. a null responseHeaders array when building a mock network record).","solutions":["Initialize the array before the call: CommonHeaders.of(new String[0]) for empty headers","Fix the upstream code that produced the null array (usually an uninitialized or cleared header collection)","Use the Builder API instead, which tolerates incremental construction"],"exampleFix":"// before\nCommonHeaders h = CommonHeaders.of(headerArray); // headerArray == null\n\n// after\nCommonHeaders h = headerArray == null\n    ? new CommonHeaders.Builder().build()\n    : CommonHeaders.of(headerArray);","handlingStrategy":"type-guard","validationCode":"String[] safe = (headerArray == null) ? new String[0] : headerArray;\nCommonHeaders h = CommonHeaders.of(safe);","typeGuard":"boolean isNonNullHeaderArray(String[] a) { return a != null; }","tryCatchPattern":null,"preventionTips":["Never forward raw arrays from interceptors without a null default","Default to new String[0] or Builder for the empty case"],"tags":["android","network","headers","null-safety"],"backgroundTag":null,"analyzedSha":"626827cddb2feb2f3aee87a52a064b4e5ca2bed4","analyzedAt":"2026-08-14T12:45:58.758Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}