“返回”后Android代码仍在继续

时间:2011-11-06 11:14:21

标签: android android-edittext return validation

我有一些edittexts和一个按钮。 单击该按钮,我使用edittext值执行一些操作。我希望在继续之前检查是否所有edittexts都已填写。所以我在onclick监听器中使用代码

if("".equals(etLandSize.getText().toString()) || null == etLandSize.getText().toString())
    {
        Toast toast = Toast.makeText(context, text, duration);
        toast.show();

        return;
    }

//followed by some actions.

如果上述条件成立,我希望通过使用'return'返回该方法而不做任何事情。

我的问题是,即使条件成立,执行此条件后的行也会从日志中看到NPE,因为字段为空。

如果我在这个条件之后评论所有行,那么我才会看到预期的Toast,我的活动仍在那里,这是正常行为。

我在这里做错了吗?

另一种方法是我可以将代码置于else {}块中。但只是想知道为什么我不能使用回报。如果我没有意识到一些基本错误,请道歉。

3 个答案:

答案 0 :(得分:2)

你的病情看起来很奇怪。

我很确定null == etLandSize.getText().toString()永远不会成真,我会使用

etLandSize.getText().length() == 0

而不是"".equals(etLandSize.getText().toString(),因为使用""来避免与null进行比较在此处无用 - toString()无法返回null

所以试试这个:

if (etLandSize.getText().length() == 0)
{
    Toast toast = Toast.makeText(context, text, duration);
    toast.show();

    return;
}

BTW:如果您的return;try {}块内,则位于finally{}块中的部分编码将在其后运行。

答案 1 :(得分:1)

如果没有进一步的信息很难回答(这些代码放在哪里?谁叫这个函数?等等......)

作为一项基本规则,当你发现像“返回”这样基本的东西被打破时,它不是问题的原因。您很可能无法在JVM中找到一个非常奇怪的错误。

如果您确定if条件确实是真的,我猜测您的函数被调用两次,并且在其中一个调用中条件不正确。

伊泰。

答案 2 :(得分:-2)

不要在条件块内或方法中间使用return。始终只在方法结束时使用return。

在你的情况下,把你的//后跟一些动作放在“else”块中。您也可以检查文本,考虑在返回的字符串上使用trim()和length()。