Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从hashmap中的'toString'避免'NullPointerException'`_Java_Android_Android Studio_Nullpointerexception - Fatal编程技术网

Java 从hashmap中的'toString'避免'NullPointerException'`

Java 从hashmap中的'toString'避免'NullPointerException'`,java,android,android-studio,nullpointerexception,Java,Android,Android Studio,Nullpointerexception,我试图避免在某些代码中出现NullPointerException,这些代码试图与HashMap中的字符串进行比较 HashMap定义得很好,但是HashMap中可能有也可能没有相应的条目,因此我相信这可能就是我的NPE和相关的Android Studio警告的来源 我的代码是: if (region_ids !=null && source_region != null && selected_id != null) { if (source_regio

我试图避免在某些代码中出现
NullPointerException
,这些代码试图与
HashMap
中的字符串进行比较

HashMap
定义得很好,但是
HashMap
中可能有也可能没有相应的条目,因此我相信这可能就是我的NPE和相关的Android Studio警告的来源

我的代码是:

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\u id
HashMap

我是否做了足够的工作来防止
NullPointerException
s

如果是这样,为什么Android Studio还在IDE中给我警告

(请注意,
Android Studio
标签是故意包含的,因为这个问题的最后一部分非常具体。)


更新

根据代码学徒的评论和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
,”,以及
键是否存在于
HashMap
中,但我仍然相信语句可以生成一个NPE…

如果将constant反转到左边,您将自动检查它是否为null。像这样:

if(“it”).equals(源区)和
区域ID.CONTANSKEY(“it”)和
!(region_id.get(“it”).toString().equals(selected_id))){
//为不匹配的区域做一些事情
}

我不知道NPE来自哪里,但找出它的基本步骤是相同的。把你的IF语句分成几段,然后开始打印出来。你可能会发现一些奇怪的事情。你确定这就是你的NPE的来源吗?我的问题是我自己无法重现错误。我只在GooglePlay开发者控制台中看到它的报告(但是混淆/除臭目前丢失了细节!)。事实上,我在IDE中看到了警告。因此,用
if
子句来区分
if
子句本身就是一个问题。如果还想知道我在这个上下文中是否正确地使用了
containsKey()
。“我是否做了足够的工作来防止NullPointerException?”-不。在没有看到所有代码的情况下,
region\u id.get(“it”)
可能会生成null making
region\u id.get(“it”)。toString()
抛出NPE,如果您正在使用的Map实现允许空值,我认为
region\u id.containsKey(“it”)将确保
region\u id.get(“it”)不会
null”。不是这样吗?如果没有,最好的检查方法是什么?我尝试了
region\u id.get(“it”)!=空`在
if
而不是
containsKey
测试中,但仍然在IDE中得到警告。“在上面我还检查了…”请显示与此口头解释一致的代码。哦,这是一个有趣的建议。总是这样吗?你能再解释一下它是如何工作的吗?因为它们可能真的很有用。我现在已经尝试过了,Android Studio仍然在给我关于toString()方法的警告。当然,必须有一种检查方法来确保使用这种方法是安全的。