从`hashmap`中避免`toString`中的`NullPointerExceptions`

时间:2019-05-16 18:38:02

标签: java android android-studio nullpointerexception

我正在尝试避免在某些代码中尝试与来自NullPointerException的字符串进行比较的HashMap

HashMap的定义很明确,但是HashMap中可能有也可能没有相应的条目,因此我相信这可能是我的NPE和相关的Android Studio警告的来源。 / p>

我的代码是:

if (region_ids !=null && source_region != null && selected_id != null) {
    if (source_region.equals("it") && region_ids.containsKey("it") && !selected_id.equals(region_ids.get("it").toString())) {
        // Do stuff for mismatched region
    }
}

region_idsHashMap的地方。

我是否已采取足够措施阻止NullPointerException

如果是这样,为什么Android Studio在IDE中仍会向我发出警告?

(请注意,由于该问题的最后一部分是特定于AS的,因此有意添加了Android-Studio标签。)


更新

基于Code-Apprentice的评论和Nosyara的回答,我现在在if语句上有以下两个变体,但是在toString()方法上仍然收到NPE警告:

if ( region_ids_string != null && spin_region_id != null && source_region != null && selected_id != null && assoc_ids != null) {
    if ( region_ids_string.size() > spin_region_id.getSelectedItemPosition()) {
        if (source_region.equals("com_mx") && assoc_ids.get("com_mx") != null && assoc_ids.containsKey("com_mx") && !selected_id.equals(assoc_ids.get("com_mx").toString())) {
                return true;
        } else if ("com_au".equals(source_region) && assoc_ids.containsKey("com_au") && assoc_ids.get("com_au") != null && !assoc_ids.get("com_au").toString().equals(selected_id)) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
} else {
    return false;
}

因此,我相信我现在正在检查null,“”以及Key中是否存在HashMap,但AS仍然认为该语句可以生成NPE ...

1 个答案:

答案 0 :(得分:1)

如果使用左侧的常数反转条件,则将自动检查它是否为NULL。像这样:

if ("it".equals(source_region) && 
region_ids.containsKey("it") && 
!(region_ids.get("it").toString().equals(selected_id))) {
    // Do stuff for mismatched region
}